编程高手必学的内存知识
海纳
华为编译器高级专家,原 Huawei JDK 团队负责人
20674 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
编程高手必学的内存知识
15
15
1.0x
00:00/00:00
登录|注册

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
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 费城的二鹏
    使用 forwarding table 的好处是,在remap前就可以释放已经被迁移的 page,只要保留 forwarding 即可,减少内存占用。 而如果使用 forwarding point 则需要一直保留这个page 直到重映射完成。 另一方面是性能考虑,提升了吞吐量

    作者回复: 厉害!言简意赅。

    2021-12-20
    8
  • Danta
    复制对象过程中是不是要禁止修改对象啊
    2022-02-25
  • 李二木
    由于remap 会等待下一次mark,这里的下一次mark是下一次垃圾回收吗?如果是那假如很久不触发回收,那之前标记的对象都还是通过forwarding table获取了哦?
    2021-12-20
    1
  • 费城的二鹏
    我想问一个关于染色指针的问题。 假如有 a,b,c 三个对象。a 和 b均引用c,在扫描过程中,对指针做标记,是在 a 和 b对象存储的引用上加标记吗?还是一个公共空间加标记?如何确保修改了a引用c的地址后,b也可以做修改? 看了内容,感觉这个指针标记的修改有点像公共空间,改一次就行了。
    2021-12-20
    2
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部