ZGC将在下一个JDK版本中生产可用

ZGC是一个无延时的GC算法,为JDK带来了近乎实时的GC回收能力,但是一直是处于实验性的状态。根据最新的JEP 提案 377, ZGC算法,将进入生产可用状态


ZGC将在下一个JDK版本中生产可用

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命令行选项。这将不再需要,这些测试将相应地进行调整。


分享到:


相關文章: