美文网首页
对G1回收阶段的理解(基于RednaxelaFX)

对G1回收阶段的理解(基于RednaxelaFX)

作者: masterFan | 来源:发表于2018-06-18 16:17 被阅读0次

第一阶段:Global concurrent marking(全局并发收集)

initial marking STW:从根集合开始扫描能直接达到的对象,存储在一个外部bitmap中。G1的initial marking会在young gc暂停中完成,这样可以简单G1暂停的时间。(牛逼的设计)
concurrent marking
1.并发标记遍历整个堆中的对象,有标记的对象,放入bitmap中
2.扫描SATB write barrier所记录的引用。
final marking(remark) STW
1.处理每个线程遗留的SATB write barrier的对象引用
2.处理弱引用

G1 remark与CMS remark区别
G1的remark直扫描SATB baffer
CMS remark扫描的东西可多了,包含mod-union table中的dirty table,整个根集合(young gen中的对象会作为跟集合的一部分被进行扫描)。

cleanup STW
在bitmap中统计每个region中对象的标记状态。

第二阶段:evacuation(拷贝存活对象) STW

会有选择的将一部分region中存活的对象copy到空的regoin中,然后清空原region的空间。(这个过程就是一个复制对象、整理空间的过程)
Evacation阶段可以选择任意个数的region集合进行处理,这个待处理的region集合称为“Collection Set”。
选定CSet后,会采用并行copying的方式,将CSet中存活的对象拷贝到新的region中,整个过程都是STW的。

CSet如何选定?
CSet的选定完全靠统计模型找出收益最高、开销不超过用户设置的N个region来进行。由于每个region都包含一个RSet,需要单独处理一个或多个region都是不成问题的。

分代G1选定CSet的模式(young GC & mixed GC)
Young GC:选定范围—整个young gen中的region,通过控制选定的region来控制young gc的开销。
Mixed GC: 选定范围—整个young gen+外加在global concurrent marking统计出的收益最高的N个old gen region。

G1会根据实际情况自动选择执行young gc或mixed gc,然后会定期执行全局并发标记。初始标记会搭载在young gc中完成,执行全局标记阶段过程中,不会执行mixed
gc,反之也成立。如果mixed gc没法跟上应用分配内存的速度,导致old gen用满无法再执行mixed gc的话,就会触发full gc,full gc使用serial old gc对整个堆进行回收。

在G1 GC中调用System.gc()的话,默认执行serial old GC。如果不想使用serial old GC的话,可以增加命令-XX:+ExplicitGCInvokesConcurrent,这时在调用System.gc()的话,就会启动global concurrent marking来执行。

G1 GC如何实现低延时的对象回收的?
答案就在G1 GC每次只选择收集收益最高的那些region,保证GC过程开销在一个可控的范围内。
evacuate拷贝对象的过程需要暂停整个应用,暂停的时间可以通过-XX:MaxGCPauseMillis来控制。但一般不建议设置太短,过短的暂停时间,会导致mixed gc回收无法跟上应用分配对象的速度,最终可能会引发full gc的噩耗,经验之谈建议这个值设定在100ms~250ms以内。

G1 GC VS CMS 两者谁更优?
通常情况下,CMS在较小的堆(6~8G)和合适的workload场景下,暂停时间会比G1更短。

CMS几个阶段中,有可能发生暂停时间最长得阶段是remark阶段,因为remark阶段需要对整个根集合,其中还包括young gen进行扫描。如果CMS在做并发标记过程中,应用还在拼命大量得创建对象,这样的就会导致remark阶段发生很长时间来暂停。由此可以得出一个结论:young gen越大,CMS remark暂停时间越长。

原文:http://hllvm.group.iteye.com/group/topic/44381#post-272188

相关文章

网友评论

      本文标题:对G1回收阶段的理解(基于RednaxelaFX)

      本文链接:https://www.haomeiwen.com/subject/wtpneftx.html