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:+UseZGC
ZGC 今天通过命令行选项启用。让 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 不会开发任何其他测试。
目前,一些测试-XX:+UnlockExperimentalVMOptions
在启用 ZGC 时提供命令行选项。这将不再需要,并且这些测试将进行相应调整。