跳到主要内容

JEP 363:删除并发标记扫描 (CMS) 垃圾收集器

概括

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

非目标

  • 删除任何其他垃圾收集器不是目标。
  • 从该 JEP 所针对的版本之前的版本中删除 CMS 垃圾收集器并不是目标。

动机

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

在此期间,我们还看到了两个新收集器 ZGC 和 Shenandoah 的引入,以及对 G1 的进一步改进,G1 是自 JDK 6 以来 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>

并且虚拟机将使用默认收集器继续执行。

备择方案

CMS 的代码可以保存在存储库中,但不能编译。然而,如果没有维护者,代码很快就会过时,但可能会给人一种受到支持的错误印象。

用户可以转移到 G1 垃圾收集器或任何其他收集器。只要早期版本仍支持 CMS,绝对需要 CMS 的用户仍可以使用它。