跳到主要内容

JEP 363:移除并发标记清除(CMS)垃圾收集器

QWen Max 中英对照 JEP 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector

概述

移除并发标记清除(CMS)垃圾收集器。

非目标

  • 目标并非移除任何其他垃圾收集器。
  • 目标并非从早于本 JEP 所针对的发布版本之前的发布中移除 CMS 垃圾收集器。

动机

两年多前,在 JEP 291 中,我们为了加速其他垃圾收集器的开发,决定在未来的版本中弃用 CMS 收集器。在此期间,没有可信的贡献者站出来承担 CMS 的维护工作。

在此期间,我们还看到了两个新的收集器 ZGC 和 Shenandoah 的引入,以及对 G1 的进一步改进,自 JDK 6 以来 G1 一直是 CMS 的预期继任者。此时,Hotspot JVM 中可用的垃圾收集器,即使它们没有超过 CMS 的性能,其开销也足够小,因此现在可以安全地移除 CMS。我们预计现有收集器的未来改进将进一步减少对 CMS 的需求。

描述

此更改将禁用 CMS 的编译,删除源代码树中 gc/cms 目录的内容,并移除仅与 CMS 相关的选项。文档中对 CMS 的引用也将被清除。尝试使用 CMS 的测试将被移除或根据需要进行调整。

尝试通过 -XX:+UseConcMarkSweepGC 选项使用 CMS 时,将收到以下警告消息:

Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option UseConcMarkSweepGC; \
support was removed in <version>
java

并且 VM 将继续使用默认收集器执行。

替代方案

CMS 的代码可以保留在代码库中,但不进行编译。然而,如果没有维护者,代码会很快变得过时,但可能会给人一种被支持的错误印象。

用户可以切换到 G1 垃圾收集器或任何其他收集器。绝对需要 CMS 的用户只要在早期版本中仍然受支持,就可以继续使用它。