GC Phases
1. Initial Mark - 初始标记阶段 - STW
作用:标记存活的对象。
主要标记两部分:
- 老年代中所有的 GC Roots 对象;
- 年轻代中活着的对象引用到的老年代的对象;
2. Concurrent Mark - 并发标记阶段
从“初始化标记”阶段找到的GC Roots开始,找出所有存活的对象。
并发标记的特点是标记线程和应用程序线程同时运行。并不是老年代的所有存活对象都会被标记,因为标记的同时应用程序会改变一些对象的引用等。
3. Concurrent Preclean - 预清理阶段
前一个阶段在并行运行的时候,一些对象的引用已经发生了变化,当这些引用发生变化的时候,JVM会标记堆的这个区域为Dirty Card(包含被标记但是改变了的对象,被认为”dirty”),这就是Card Marking。