写点什么

JVM g1 gc 学习笔记二

用户头像
风翱
关注
发布于: 23 分钟前

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 是一样的。

发布于: 23 分钟前阅读数: 2
用户头像

风翱

关注

还未添加个人签名 2017.11.24 加入

勇于尝试,持续成长

评论

发布
暂无评论
JVM g1 gc 学习笔记二