JVM g1 gc 学习笔记二
G1 GC 的处理步骤二
g1 gc 的六个阶段:
阶段 1: Initial Mark(初始标记)
此阶段标记所有从 GC 根对象直接可达的对象。
阶段 2: Root Region Scan(Root 区扫描)
此阶段标记所有从 "根区域" 可达的存活对象。根区域包括:非空的区域,以及在标记过程中不得不收集的区域。
阶段 3: Concurrent Mark(并发标记)
此阶段和 CMS 的并发标记阶段非常类似:只遍历对象图,并在一个特殊的位图中标记能访问到的对象。
阶段 4: Remark(再次标记)
和 CMS 类似,这是一次 STW 停顿(因为不是并发的阶段),以完成标记过程。 G1 收集器会短暂地停止应用线程,停止并发更新信息的写入,处理其中的少量信息,并标记所有在并发标记开始时未被标记的存活对象。
阶段 5: Cleanup(清理)
最后这个清理阶段为即将到来的转移阶段做准备,统计小堆块中所有存活的对象,并将小堆块进行排序,以提升 GC 的效率,维护并发标记的内部状态。 所有不包含存活对象的小堆块在此阶段都被回收了。有一部分任务是并发的:例如空堆区的回收,还有大部分的存活率计算。此阶段也需要一个短暂的 STW 暂停。
3、转移暂停: 混合模式(Evacuation Pause (mixed))
并发标记完成之后,G1 将执行一次混合收集(mixed collection),就是不只清理年轻代,还将一部
分老年代区域也加入到回收集中。混合模式的转移暂停不一定紧跟并发标记阶段。有很多规则和历史数
据会影响混合模式的启动时机。比如,假若在老年代中可以并发地腾出很多的小堆块,就没有必要启动
混合模式。因此,在并发标记与混合转移暂停之间,很可能会存在多次 young 模式的转移暂停。
具体添加到回收集的老年代小堆块的大小及顺序,也是基于许多规则来判定的。其中包括指定的软实时
性能指标,存活性,以及在并发标记期间收集的 GC 效率等数据,外加一些可配置的 JVM 选项。混合收
集的过程,很大程度上和前面的 fully-young gc 是一样的。
版权声明: 本文为 InfoQ 作者【风翱】的原创文章。
原文链接:【http://xie.infoq.cn/article/885dac2b676ada17fa022e2b2】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论