跳到主要内容

JEP 377:ZGC:可扩展的低延迟垃圾收集器(生产)

概括

将 Z 垃圾收集器从实验性功能更改为产品功能。

非目标

此 JEP 不建议更改默认 GC,仍为 G1。

动机

ZGC 由JEP 333集成到 JDK 11 中。如此规模和复杂性的新功能最好谨慎、逐步地引入,因此我们将其设为实验性功能。这有助于设定用户期望,并允许用户提供反馈,而无需下载或构建单独的 JDK 二进制文件,如果 ZGC 开发在 JDK 之外继续进行,就会出现这种情况。

自从在 JDK 11 中引入以来,我们收到了积极的反馈,解决了许多错误,并添加了许多功能和增强功能。强调一些更重要的:

  • 并发类卸载
  • 取消提交未使用的内存(JEP 351
  • 最大堆大小从 4TB 增加到 16TB
  • 最小堆大小减少至 8MB
  • -XX:SoftMaxHeapSize
  • 支持 JFR 泄漏分析器
  • 支持类数据共享
  • 有限且不连续的地址空间
  • 支持将堆放置在 NVRAM 上
  • 提高 NUMA 意识
  • 多线程堆预接触

此外,现在支持所有常用平台:

ZGC 的测试表明它是稳定的,并且在撰写本文时,我们已经几个月没有收到新的 ZGC 特定错误。凭借 ZGC 如今的稳定性、功能集和平台支持,是时候取消其实验状态并将其作为产品功能了。

描述

-XX:+UnlockExperimentalVMOptions -XX:+UseZGCZGC 今天通过命令行选项启用。让 ZGC 成为产品(非实验性)功能意味着-XX:+UnlockExperimentalVMOptions不再需要该选项。

将 ZGC 变成产品(非实验)功能主要是将UseZGC命令行选项类型从更改experimentalproduct。此外,我们还将更改以下 ZGC 特定选项,目前标记experimental为 ,为product。我们不会更改这些选项的默认值。

ZAllocationSpikeTolerance
ZCollectionInterval
ZFragmentationLimit
ZMarkStackSpaceLimit
ZProactive
ZUncommit
ZUncommitDelay

以下 ZGC 特定的 JFR 事件当前标记experimental为 ,也将更改为product

ZAllocationStall
ZPageAllocation
ZPageCacheFlush
ZRelocationSet
ZRelocationSetGroup
ZUncommit

测试

ZGC 的测试作为JEP 333的一部分添加,此后又添加了其他测试。本 JEP 不会开发任何其他测试。

目前,一些测试-XX:+UnlockExperimentalVMOptions在启用 ZGC 时提供命令行选项。这将不再需要,并且这些测试将进行相应调整。