cms 并发标记
作为JEP-291的一部分,Java开发工具包9不赞成使用流行的并发标记扫描垃圾收集算法。该决定是为了减轻垃圾收集(GC)代码的维护负担并加速新开发。
结果,如果使用-XX:+ UseConcMarkSweepGC参数从Java 9或更高版本启动应用程序以激活并发标记扫描GC算法,则会看到以下警告:
Java HotSpot(TM)64位服务器VM警告:选项UseConcMarkSweepGC在9.0版中已弃用,在以后的版本中可能会删除。
为什么不赞成并发标记扫描?
如果要搬运很多行李,尤其是在Java代码中,那就很难前进了。 使用并发标记扫描,此功能正是导致其消失的原因。 它是一种高度可配置的复杂算法,并为Java开发工具包(JDK)中的GC代码库增加了许多复杂性。 但是,只有JDK开发团队可以简化GC代码库,才能在GC领域加速和创新。
让我们探索可以传递给每个GC算法的Java虚拟机(JVM)参数的数量,以证明它们的复杂性:
- 所有人共同点:50
- 平行:6
- CMS:72
- G1:26
- ZGC:8
大约有50个与GC相关的参数可以传递给任何JVM 。 在这50个参数之上,仅CMS可以传递72个附加参数,这比任何其他GC算法都要多得多。 这种增加增加了JDK团队支持所有这些参数的编码复杂性。
如果当前使用CMS作为GC算法,您有什么选择?
三个最引人注目的选项是:
- 切换到G1 GC算法
- 切换到Z GC算法(JDK 11、12中的早期访问)
- 继续使用CMS,并处理弃用警告
切换到G1 GC算法
自Java 9以来,G1 GC已成为默认的GC算法 ,您可以放心地考虑将应用程序移至该算法。 与并发标记扫描相比,它可以提供更好的性能特征,并且由于包含更少的参数,因此更容易调整该算法。 此外,它提供了一些选项以从内存中消除重复的字符串。 如果可以消除这些重复的字符串,则可以帮助您减少总体内存占用。
切换到Z GC算法
Z GC是一种可伸缩的低延迟垃圾回收器,其主要目标是使GC暂停时间保持在10 ms以内。 Java 11和12中提供了对Z GC算法的早期访问,因此,如果您的应用程序在这些发行版之一上运行,则可以将其视为并发标记扫描。
继续进行并发标记扫描
对于某些应用程序,即使进行了大量调整,与G1 GC算法相比,并发Mark Sweet仍可提供更好的结果。 如果您已经探索了其他选择,并且发现并发标记扫描为您的应用程序提供了最佳结果,那么您应该坚持使用当前的GC算法。
在OpenJDK JDK9-dev邮件列表中已经有关于保持并发标记扫描有效的讨论,因此它可能不会永远消失。 二十年前在Java 1.1中不推荐使用的某些功能和API仍在当今的应用程序中使用,这意味着不推荐使用并不总是终结 。 您可以继续在“并发标记扫描”上运行,但是请注意,在将来的任何发行版中,它都可能被完全删除 。
请注意,每个应用程序都是独特且不同的,并且不会被谈论GC调整和调整的期刊和其他文献所迷惑。 当您测量新的GC设置时,应完成全面的测试,指定基准性能特征并研究关键性能指标以做出明智的决定。
cms 并发标记
Java 9开始不推荐使用CMS并发标记扫描垃圾收集算法,这一变化旨在减少GC代码维护并促进新功能开发。启动应用时使用-XX:+ UseConcMarkSweepGC参数会收到弃用警告,提示该选项可能在后续版本中删除。

1万+

被折叠的 条评论
为什么被折叠?



