23 | Pauseless GC:挑战无暂停的垃圾回收
海纳
你好,我是海纳。
在前面的几节课程中,我们学习了 CMS 、G1 等垃圾回收算法,这两类 GC 算法虽然一直在想办法降低 GC 时延,但它们仍然存在相当可观的停顿时间。
如何进一步降低 GC 的停顿时间,是当前垃圾回收算法领域研究的最热点话题之一。今天我们就来学习这类旨在减少 GC 停顿的垃圾回收算法,也就是无暂停 GC(Pauseless GC)。由于 Hotspot 的巨大影响力和普及程度,以及它的代码最容易获得,我们这节课就以 ZGC 为例来深入讲解无暂停 GC。
而且,ZGC 对 Java 程序员的意义和 G1 是同样重要的。如果说 CMS 代表的是过去式,而 G1 是一种过渡(尽管这个过渡期会很长),那么 ZGC 无疑就是 JVM 自动内存管理器的未来。
通过这节课的学习,你就能了解到无暂停 GC 的基本思想和可以使用的条件,从而为未来正确地使用无暂停 GC 做好充分的准备。
无暂停 GC 这个词你可能比较陌生,让你觉得这个算法很难,我们不妨先来了解一下它的前世今生,你就能知其然,经过后面对它原理的讲解,你就能知其所以然了。
无暂停 GC 简介
JVM 的核心开发者 Cliff Click 供职于 Azul Systems 公司期间,撰写了一篇很重要的论文,也就是Pauseless GC,提出了无暂停 GC 的想法和架构设计。同时,Azul 公司也在他们的 JVM 产品 Zing 中实现了一个无暂停 GC,将 GC 的停顿时间大大减少,这就是C4 垃圾回收器。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
文章标题:深入了解ZGC中的无暂停GC技术 ZGC作为JVM自动内存管理器的未来,采用了无暂停GC(Pauseless GC)技术,成功将垃圾回收的最大停顿时间控制在10ms以内。该技术的核心在于并发转移,使得应用线程和GC线程可以同时进行对象转移,避免了长时间的“世界停止”。ZGC的回收过程主要分为Mark、Relocate和Remap三个阶段,其中Mark和Remap阶段是可以重叠的。通过地址视图的切换以及使用read barrier完成对象“自愈”过程,ZGC能够高效、准确的完成并发转移,大大降低了垃圾回收过程中的停顿时间,达到无暂停GC的效果。ZGC的并发转移背后有两大关键技术,分别是read barrier和colored pointer,它们保证了应用线程的正确性和高效性。在Remap阶段,ZGC通过地址视图的统一修正了对象之间的引用关系,确保了活跃视图的一致性。总的来说,ZGC中的无暂停GC技术通过并发转移和关键技术的应用,实现了极低的停顿时间,为未来正确地使用无暂停GC提供了重要参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编程高手必学的内存知识》,新⼈⾸单¥59
《编程高手必学的内存知识》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(4)
- 最新
- 精选
- 费城的二鹏使用 forwarding table 的好处是,在remap前就可以释放已经被迁移的 page,只要保留 forwarding 即可,减少内存占用。 而如果使用 forwarding point 则需要一直保留这个page 直到重映射完成。 另一方面是性能考虑,提升了吞吐量
作者回复: 厉害!言简意赅。
2021-12-208 - Danta复制对象过程中是不是要禁止修改对象啊2022-02-25
- 李二木由于remap 会等待下一次mark,这里的下一次mark是下一次垃圾回收吗?如果是那假如很久不触发回收,那之前标记的对象都还是通过forwarding table获取了哦?2021-12-201
- 费城的二鹏我想问一个关于染色指针的问题。 假如有 a,b,c 三个对象。a 和 b均引用c,在扫描过程中,对指针做标记,是在 a 和 b对象存储的引用上加标记吗?还是一个公共空间加标记?如何确保修改了a引用c的地址后,b也可以做修改? 看了内容,感觉这个指针标记的修改有点像公共空间,改一次就行了。2021-12-202
收起评论