ZGC是一个无延时的GC算法,为JDK带来了近乎实时的GC回收能力,但是一直是处于实验性的状态。根据最新的JEP 提案 377, ZGC算法,将进入生产可用状态
所有者 佩尔·利登
类型: 特征
范围: 实现
地位: 目标
版本:15
组件:hotspot/ gc
讨论:hotspot dash gc dash dev at openjdk dot java dot net
相关: JEP 351: ZGC:未提交未使用的内存(实验)
JEP 333: ZGC:可扩展的低延迟垃圾回收器(实验)
JEP 364: macOS 上的 ZGC(实验)
JEP 365: Windows 上的 ZGC(实验)
评审者 埃里克·奥斯特伦德,米凯尔·维德斯泰特,斯特凡·卡尔松
通过 米凯尔·维茨泰特
创建 2018/08/20 06:16
更新 2020/04/03 22:53
问题 8209683
将 Z 垃圾回收器从实验功能更改为产品功能。
此 JEP 不建议更改默认 GC,该 GC 仍为 G1。
ZGC 被JEP 333集成到 JDK 11 中。如此大、复杂性的新功能最好仔细、渐进地引入,因此,我们将其作为实验功能。这有助于设定用户期望,并允许用户提供反馈,而无需下载或构建单独的 JDK 二进制文件,如果 ZGC 开发继续超出 JDK,情况就是如此。
自 JDK 11 引入以来,我们收到了积极的反馈,我们解决了许多错误,并增加了许多功能和增强功能。要强调一些更重要的:
并发类卸载
取消提交未使用的内存(JEP 351))
最大堆大小从 4TB 增加到 16TB
最小堆大小减少到 8MB
-XX:SoftMaxHeapSize
支持 JFR 泄漏探查器
支持类数据共享
有限的、不连续的地址空间
支持将堆放在 NVRAM 上
提高 NUMA 意识
多线程堆预接触
此外,现在支持所有常用平台:
Linux/x86_64 (JEP 333))
Linux/无政府状态64 (8214527)
windows (JEP 365)
macOS (JEP 364)
对 ZGC 的测试表明它是稳定的,并且,截至本文编写,我们几个月来没有收到任何特定于 ZGC 的新 Bug。凭借 ZGC 目前的稳定性、功能集和平台支持,是时候删除其实验状态并将其作为产品功能了。
ZGC 今天通过-XX:+UnlockExperimentalVMOptions -XX:+UseZGC命令行选项启用。使 ZGC 成为产品(非实验性)功能意味着不再需要-XX:+UnlockExperimentalVMOptions。
将ZGC转变为一个产品(非实验性)功能主要是将UseZGC命令行选项类型从experimental改为product的问题。此外,我们还将将以下 ZGC 特定的选项(当前标记为experimental)更改为product。我们不会更改这些选项的默认值。
ZAllocationSpikeTolerance
ZCollectionInterval
ZFragmentationLimit
ZMarkStackSpaceLimit
ZProactive
ZUncommit
ZUncommitDelay
以下 ZGC 特定的 JFR 事件(当前标记为experimental)也将更改为product.
ZAllocationStall
ZPageAllocation
ZPageCacheFlush
ZRelocationSet
ZRelocationSetGroup
ZUncommit
ZGC 的测试作为JEP 333的一部分添加,自那时以来又增加了其他测试。作为 JEP 的一部分,不会开发任何额外的测试。
启用 ZGC 时,某些测试当前提供-XX:+UnlockExperimentalVMOptions命令行选项。这将不再需要,这些测试将相应地进行调整。