揭秘ZGC分代式:Java垃圾回收的新标准

发表时间: 2024-07-09 14:00

作者 | A N M Bazlur Rahman

译者 | 马可薇

策划 | 丁晓昀

JEP 474(ZGC:默认分代式)以 JDK 23 为目标。该 JEP 建议将 Z 垃圾收集器(ZGC)的默认使用模式从非分代式改为分代式。非分代式将被弃用,并在未来的 JDK 版本中删除。这将彻底降低维护这两种模式的成本,让未来的开发工作可以集中在 JEP 439(分代式 ZGC)上。


JEP 474 中最主要的变化大概就是将 ZGenerational 选项的默认值从 false 改为 true,明确表明了 Java 的内存管理方式发生了战略性变化,尤其是在为 Java 应用程序提供更多“空闲”内存和更低的 GC 开销的基础上优化了垃圾回收。


将默认选项过渡到分代式是希望能借此减少同时支持分代式和非分代式的维护工作,从而允许 OpenJDK 团队会将分代式 ZGC 变得更为高效且有效,以应对外界对现代 Java 应用程序的期望。开发者需注意,非分代模式虽仍可用但已被弃用,因此在通过命令行选项明确启用非分代式时会出现警告。非分代式被弃用的事实意味着它在未来将会被移除。


下面这些常用命令行参数

  • -XX:+UseZGC:现默认使用分代式 ZGC
  • -XX:+UseZGC -XX:+ZGenerational:同样是使用分代式 ZGC 但对 ZGenerational 标志发出弃用警告。
  • -XX:+UseZGC -XX:-ZGenerational:使用非分代式 ZGC,但对 ZGenerational 标志发出弃用警告,并提示非分代式已被弃用且将被移除。


开发者需对自己的应用程序进行测试,以确保其在新默认设置下的兼容性和性能。如果应用程序与 JVM 有紧密集成,且对垃圾回收非常敏感,那么其性能可能会发生变化。


OpenJDK 的测试承诺中包括确保现有配置和基准在新默认设置下的性能符合预期。对多数应用程序来说风险较低,但部分高性能或低延迟应用程序可能会需要对配置进行调整。


JEP 474 标志着 Java 持续发展过程中的一次关键更新,意图简化并改进垃圾回收的过程,并重点关注分代式技术。此次更新需要开发者重新评估其应用程序的兼容性和性能,但从长远来看,这次 JEP 有望能更高效地管理 Java 应用程序。


原文链接JEP 474: Generational Mode Now Standard for ZGC in Java