跳到主要内容

JEP 490:ZGC:删除非分代模式

概括

删除 Z 垃圾收集器(ZGC)的非分代模式。

目标

  • 降低支持两种不同模式的维护成本。

动机

维护非分代 ZGC 会减慢新功能的开发速度。如JEP 439: Generational ZGC中所述:

对于大多数用例来说,分代式 ZGC 应该是比非分代式 ZGC 更好的解决方案。我们最终应该能够用前者取代后者,以降低长期维护成本。

描述

通过淘汰该选项并删除非分代 ZGC 代码及其测试来删除非分代模式ZGenerational。该选项将在未来的版本中过期,届时它将不会被 HotSpot JVM 识别,从而拒绝启动。

经过这些更改后,相关的命令行选项将按如下方式工作:

  • -XX:+UseZGC

    • 使用分代 ZGC。
  • -XX:+UseZGC -XX:+ZGenerational

    • 使用分代 ZGC。
    • 打印了过时选项的警告。
  • -XX:+UseZGC -XX:-ZGenerational

    • 使用分代 ZGC。
    • 打印了过时选项的警告。

切换到 Generational ZGC 的工作负载可能会遇到日志输出以及可服务性和管理 API 提供的数据的差异。

风险和假设

该 JEP 与JEP 439:分代 ZGCJEP 474:ZGC:默认分代模式共享其风险和假设。

分代式 ZGC 的表现与非分代式 ZGC 不同。这带来的主要风险是,某些工作负载本质上是非分代式的,因此可能会出现轻微的性能下降。我们认为,这是一组足够小的工作负载,因此无法证明长期维持两种独立 ZGC 模式的成本是合理的。

具体风险包括:

  • 用户可能需要调整针对非代际 ZGC 调整的配置。

  • 过时选项的警告信息可能会导致问题。

  • 与 JVM 内部、GC 日志以及可通过管理接口获取的数据紧密耦合的工作负载可能需要额外注意。