JEP 490: ZGC:移除非世代模式
概述
移除 Z 垃圾收集器(ZGC)的非世代模式。
目标
- 降低支持两种不同模式的维护成本。
动机
维护非世代 ZGC 会减缓新功能的开发。正如在 JEP 439: Generational ZGC 中所述:
Generational ZGC 应该是比非世代 ZGC 更好的解决方案,适用于大多数使用场景。我们应该最终能够用前者取代后者,以降低长期维护成本。
描述
通过废弃 ZGenerational
选项并删除非世代 ZGC 代码及其测试,移除非世代模式。该选项将在未来的版本中过期,在那时,它将不被 HotSpot JVM 识别,JVM 将拒绝启动。
经过这些更改后,相关的命令行选项将按如下方式工作:
-
-XX:+UseZGC
- 使用了分代 ZGC。
-
-XX:+UseZGC -XX:+ZGenerational
- 使用了分代 ZGC。
- 打印了一个废弃选项警告。
-
-XX:+UseZGC -XX:-ZGenerational
- 使用了分代 ZGC。
- 打印了一个废弃选项警告。
切换到Generational ZGC的工作负载可能会在日志输出和服务性与管理API提供的数据方面遇到差异。
风险和假设
本 JEP 与 JEP 439: Generational ZGC 和 JEP 474: ZGC:默认使用世代模式 共享其风险和假设。
世代 ZGC 的表现将与非世代 ZGC 不同。这带来的主要风险是,有些工作负载本质上是非世代的,因此可能会出现轻微的性能下降。我们认为,这类工作负载的数量足够少,不值得长期维护两种不同的 ZGC 模式。
具体风险包括:
-
用户可能需要调整针对非世代 ZGC 优化的配置。
-
废弃选项的警告信息可能会导致问题。
-
与 JVM 内部、GC 日志以及通过管理接口提供的数据紧密耦合的工作负载可能需要额外的关注。