美文网首页
对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