前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >G1垃圾收集器(7)之Mixed GC

G1垃圾收集器(7)之Mixed GC

作者头像
黑洞代码
发布2021-06-23 00:30:24
2.7K0
发布2021-06-23 00:30:24
举报

混合回收(Mixed GC)

混合回收,会选择所有年轻代区域(Eden/Survivor)(最大年轻代分区数)和部分老年代区域进去回收集合进行回收的模式。年轻代区域对象移动到Survivor区,老年代区域移动到老年代区域。由于G1中老年代区域的回收方式和新生代一样是“移动式”,被回收区域在移动后会全部清空,所以不会像其他使用清除算法的回收器一样(比如CMS)有碎片问题。

下面是一个Mixed GC过程的简单示意图:

混合回收的执行过程主要包含两步:

1.全局并发标记(global concurrent marking) - 增量式并发的标记存活对象,标记过程中Mutator的引用更新也会被标记2.移动/转移/拷贝存活对象(evacuation)- 和年轻代的移动过程一致,复用代码,最大的不同是将并发标记的结果也进行处理

在进行Mix GC之前,会先进行global concurrent marking(全局并发标记)。global concurrent marking的执行过程是怎样的呢?

初始标记(Initial Mark)

标记由根直接引用的对象(STW),这个过程是在年轻代GC中完成的,不过不是每次年轻代GC都会进行初始标记。

并发标记(Concurrent Mark)

以步骤1的标记结果作为root,遍历可达的对象进行标记,和mutator并行,并且可被年轻代GC中断,年轻代GC完成后可继续进行标记

最终标记 (Remark)

标记遗漏的对象,主要是SATB相关**(STW)

SATB (Snapshot At The Beginning,初始快照),是一种将并发标记阶段开始时对象间的引用关系,以逻辑快照的形式进行保存的手段

这个解释有点……抽象,简单理解就是,在并发标记时,以当前的引用关系作为基础引用数据,不考虑Mutator并发运行时对引用关系的修改(Snapshot命名的由来),标记时是存活状态就认为是存活状态,同时利用SATB Write Barrier记录引用变化。

清理(Cleanup)

计算标记区域的活动对象数量,清理没有存活对象的区域(标记后没有存活对象,并不是正经的回收阶段),对区域排序等(部分STW)

混合收集

这里的混合收集,是指混合回收GC下的回收过程。在全局并发标记完成后,就可以进行混合收集了(mixed),混合收集阶段和年轻代GC一致,从并发标记的结果/ROOTS/RSet遍历回收存活对象即可,只是多了老年代区域的回收。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 落叶飞翔的蜗牛 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 混合回收(Mixed GC)
  • 初始标记(Initial Mark)
  • 并发标记(Concurrent Mark)
  • 最终标记 (Remark)
  • 清理(Cleanup)
  • 混合收集
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档