跳到主要内容

JEP 474:ZGC:默认的分代模式

QWen Max 中英对照 JEP 474: ZGC: Generational Mode by Default

总结

将 Z 垃圾收集器 (ZGC) 的默认模式切换为分代模式。弃用非分代模式,并计划在未来版本中将其移除。

目标

  • 表明未来的开发将专注于 Generational ZGC 的意图。

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

非目标

  • 移除非分代 ZGC 并非目标发布版的目标。

动机

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

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

描述

通过将 ZGenerational 选项的默认值从 false 改为 true,使分代 ZGC 成为 ZGC 的默认模式。通过弃用 ZGenerational 选项来弃用非分代模式。

在这些更改之后,将根据所提供的命令行参数观察到以下行为:

  • -XX:+UseZGC

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

    • 使用的是分代 ZGC。
    • 会发出 ZGenerational 选项已被弃用的警告。
  • -XX:+UseZGC -XX:-ZGenerational

    • 使用的是非分代 ZGC。
    • 会发出 ZGenerational 选项已被弃用的警告。
    • 会发出非分代模式已被弃用并计划移除的警告。

切换到 Generational ZGC 的工作负载可能会在日志输出以及可从可服务性和管理 API 获得的数据方面存在差异。

测试

我们将确保现有测试不受弃用选项警告的影响,并且它们在与此次更改之前的相同配置下通过。

风险与假设

此 JEP 与其风险和假设与 JEP 439: Generational ZGC 共享。

分代 ZGC 的表现将不同于非分代 ZGC。这带来的主要风险是,某些工作负载本质上是非分代的,因此可能会看到轻微的性能下降。我们认为,这部分工作负载所占的比例足够小,不足以证明长期维护两个不同版本的 ZGC 所需的成本是合理的。

具体风险包括:

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

  • 弃用警告消息可能会导致问题。

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