2月5-7日QCon全球软件开发大会携手100+位大咖讲师落定北京,点击查看完整日程>> 了解详情
写点什么

Oracle 计划将 ZGC 项目提交给 OpenJDK

  • 2017-11-08
  • 本文字数:1100 字

    阅读完需:约 4 分钟

根据 OpenJDK 的邮件列表,来自 Oracle 的 Per Liden 提议将内部开发的 Z 垃圾收集器开源,并在 OpenJDK 创建 ZGC 项目。

按照 OpenJDK 的指导原则,该项目将会托管不断开发完善的 Z 垃圾收集器,也被称为 ZGC。ZGC 项目针对低延迟和大规模堆的环境进行了优化。在 Oracle 内部,ZGC 一直处于开发状态,现在提议将其开源是为了扩大贡献者和用户之间的共识。按照 Per Liden 的说法,ZGC 的设计目标:

  • 处理 TB 量级的堆;
  • GC 时间不超过 10ms;
  • 相对于使用 G1,应用吞吐量的降低不超过 15%。

在一些著名的业界标准基准测试中,ZGC 已经达到或超过该目标了。ZGC 是一个并发、基于区域(region)、增量式压缩的收集器。Stop-The-World 阶段只会在根对象扫描(root scanning)阶段发生,这样的话 GC 暂停时间并不会随着堆和存活对象的数量而增加。

目前,ZGC 已经较为成熟和稳定,但是,还有一些工作要做。ZGC 在以下 GC 任务 / 阶段中会并发执行:

  • 标记(Marking)
  • 引用处理(Reference processing)
  • 重新分配集的选择(Relocation set selection)
  • 重分配 / 压缩(Relocation/Compaction)

现在,团队的主要工作是将其他的 GC 任务 / 阶段也变成并发执行,具体来讲就是弱根对象处理(Weak root processing,包括 StringTable 和 JNIWeakGlobalRefs)、类卸载(Class unloading)。

ZGC 的核心原则就是组合使用加载屏障(load barrier)与有色对象指针(colored object pointers,colored oops)。正是采用了这两项技术,ZGC 才能做到一些操作的并发执行,比如在 Java 应用运行的时候,进行对象位置的重新分配。从 Java 线程的角度来讲,加载 Java 对象中的引用域会受到加载屏障影响。除了对象地址以外,有色对象指针还会包含加载屏障所需的其他信息,用来决定 Java 线程在使用指针之前是否要采取一些额外的措施。例如,如果对象有可能会被重新分配地址的话,加载屏障会探测到这种情况并采取相应的措施。

Per Liden 认为,这种方式相对其他可选方案有一些优势,比如能够降低堆内存的损耗、减少和简化 GC 屏障以降低运行时的损耗,而且有色对象指针除了包含标记和重分配信息之外,还可以存储任何类型的信息,这样加载屏障就能基于这些信息采用相应的措施。

该项目初始代码会基于 JDK 10 的仓库以及最新的 ZGC 补丁集构建。JDK 10 父仓库的变化将会阶段性同步到 ZGC 中。

来自 InfoWorld 的观察认为,该项目可能会与Red Hat 的 Shenandoah 垃圾收集项目产生竞争,因为后者也是以大容量堆的应用为关注对象。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-11-08 18:001638

评论 1 条评论

发布
用户头像
GC 时间不超过 10ms; 应该是 GC暂定时间(STW)不超过10ms吧
2019-08-02 09:24
回复
没有更多了
发现更多内容

替换及重置Homebrew默认源以及M1安装

一个大红包

8月日更

万物皆为向量:在线向量召回工程服务化实践

爱奇艺技术产品团队

深度学习 推荐 向量

2021年8月数据库流行度排行:数据库道路漫漫其修远兮,为用户创造核心价值是正道

墨天轮

数据库 TiDB oceanbase 国产数据库 达梦

如何在Android 8.0以下高效地复用图片?

爱奇艺技术产品团队

android 开发 图片存储

一周信创舆情观察(8.9~8.15)

统小信uos

Qunar 酒店 NodeJS 覆盖率收集实践

Qunar技术沙龙

大前端 nodejs Node JavaScrip

赋能数据中心绿色低碳 浪潮云洲有实招

浪潮云

云计算

凭借一份“面试真经pdf”,我四面字节跳动,拿下1-2级offer

Java 程序员 面试 后端 计算机

聊聊 Kafka: 在 Linux 环境上搭建 Kafka

编程susu

Java IT 计算机 编程开发 技术宅

使用 GitHub Issues 来写博客,真香。

彭宏豪95

GitHub 写作 博客

“性能混合架构”了解了吗?英特尔Alder Lake惊艳来袭

科技新消息

从头到尾没有一句废话!阿里Redis神级手册,从基础到源码

Java redis 编程 面试 阿里

浅谈云上攻防——Kubelet访问控制机制与提权方法研究

腾讯安全云鼎实验室

k8s 云安全

Activiti数据库表结构

金陵老街

DevOps如何攻克研发流程六大痛点?

BoCloud博云

在华为P50 Pro中,听到AI异构通信的朱弦三叹

脑极体

超赞!GitHub上百万下载量Java面试手册!颠覆你的认知

Java~~~

Java 架构 面试 网络 架构师

基于java springboot vue活动报名系统源码(毕设)

清风

Java springboot elementUI 毕业设计

千字真言,字字珠玑,我的Golang学习笔记,赤诚分享

奔着腾讯去

Go 语言

NodeJs深入浅出之旅:模块🌀

空城机

大前端 Node 8月日更

鲲鹏基础软件开发赛道openLooKeng赛题火热报名中,数十万大奖等您来收割

华为云开发者联盟

鲲鹏 openLooKeng

云原生的能源数据管理平台方案|EMQ 映云科技&华为云联合直播内容回顾

EMQ映云科技

华为云 能源 Cloud 碳中和 emq

Go 让 Apache APISIX 如虎添翼

Apache APISIX 中文社区

Apache 开源 插件 APISIX Go 语言

进化十多年,四足机器人的网红属性有改变吗?

脑极体

深度解读鸿蒙轻内核CPU占用率

华为云开发者联盟

鸿蒙 cpu 任务 CPUP LiteO

记一次10人跨组织、跨地域的开源协作经历

腾源会

开源 腾讯 腾讯开源

Oracle计划将ZGC项目提交给OpenJDK_Oracle_张卫滨_InfoQ精选文章