Oracle计划将ZGC项目提交给OpenJDK
极客时间编辑部
讲述:杜力大小:1.12M时长:02:27
根据 OpenJDK 的邮件列表,来自 Oracle 的佩尔·林登(Per Liden)提议将内部开发的 Z 垃圾收集器开源,并在 OpenJDK 创建 ZGC 项目。按照 OpenJDK 的指导原则,该项目将会托管不断开发完善的 Z 垃圾收集器,也被称为 ZGC。
ZGC 项目针对低延迟和大规模堆的环境进行了优化。在 Oracle 内部,ZGC 一直处于开发状态,现在提议将其开源是为了扩大贡献者和用户之间的共识。按照佩尔的说法,ZGC 的设计目标主要有三个,一是处理 TB 量级的堆;二是 GC 时间不超过 10ms;三是相对于使用 G1,应用吞吐量的降低不超过 15%。
在一些著名的业界标准基准测试中,ZGC 已经达到或超过该目标了。ZGC 是一个并发的、基于区域(region)的、增量式压缩的收集器,目前已经较为成熟和稳定,只是还有一些工作要做。
ZGC 在标记、引用处理、重新分配集的选择、重新分配 / 压缩等 GC 任务 / 阶段中会并发执行。现在,团队的主要工作是将其他的 GC 任务 / 阶段也变成并发执行,具体来讲就是弱根对象处理(Weak root processing,包括 StringTable 和 JNIWeakGlobalRefs)、类卸载(Class unloading)等。
ZGC 的核心原则就是组合使用加载屏障(load barrier)与有色对象指针(colored object pointers,colored oops)。正是采用了这两项技术,ZGC 才能做到一些操作的并发执行,比如在 Java 应用运行的时候,进行对象位置的重新分配。从 Java 线程的角度来讲,加载 Java 对象中的引用域会受到加载屏障影响。除了对象地址以外,有色对象指针还会包含加载屏障所需的其他信息,用来决定 Java 线程在使用指针之前是否要采取一些额外的措施。例如,如果对象有可能会被重新分配地址的话,加载屏障会探测到这种情况并采取相应的措施。
佩尔认为,这种方式相对其他可选方案有一些优势,比如能够降低堆内存的损耗、减少和简化 GC 屏障以降低运行时的损耗,而且有色对象指针除了包含标记和重分配信息之外,还可以存储任何类型的信息,这样加载屏障就能基于这些信息采用相应的措施。
该项目初始代码会基于 JDK 10 的仓库以及最新的 ZGC 补丁集构建,另外,JDK 10 仓库的变化将会阶段性同步到 ZGC 中。
不过,也有评论认为,该项目可能会与 Red Hat 的 Shenandoah 垃圾收集项目产生竞争,因为后者也是以大容量堆的应用为关注对象。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论