深入学习 JVM - CMS

GC Phases

1. Initial Mark - 初始标记阶段 - STW

作用:标记存活的对象。

主要标记两部分:

  • 老年代中所有的 GC Roots 对象;
  • 年轻代中活着的对象引用到的老年代的对象;

2. Concurrent Mark - 并发标记阶段

从“初始化标记”阶段找到的GC Roots开始,找出所有存活的对象。

并发标记的特点是标记线程和应用程序线程同时运行。并不是老年代的所有存活对象都会被标记,因为标记的同时应用程序会改变一些对象的引用等。

3. Concurrent Preclean - 预清理阶段

前一个阶段在并行运行的时候,一些对象的引用已经发生了变化,当这些引用发生变化的时候,JVM会标记堆的这个区域为Dirty Card(包含被标记但是改变了的对象,被认为”dirty”),这就是Card Marking。

4. Concurrent Abortable Preclean

5. Final Remark

6. Concurrent Sweep

7. Concurrent Reset