-XX+UseCMSCompactAtFullCollection 的确切用途是什么?

What's the exact use of -XX+UseCMSCompactAtFullCollection?

我理解它告诉 CMS 收集器在发生完整 GC 时对老年代进行压缩。

但我想确认我是否理解正确(从各种来源拼凑而成):

完整的 GC 会暂停世界,收集并压缩老一代(使用 CMS 的评论阶段的结果),然后收集年轻一代,提升对象(如果有),并恢复世界。

此时old gen中可能有漂浮垃圾,UseCMSCompactAtFullCollection清理它们并重新压缩old gen(基本上是old gen上的另一个GC)。因为无论如何世界都是停止的,所以可能值得做更多的压缩。

这个描述是否正确?我错过了任何重要的细节吗?谢谢

这张票很好回答:https://bugs.openjdk.java.net/browse/JDK-8027132

基本上我的理解是正确的。当分配失败时,有一个前台 CMS 模式从后台模式中获取(因为在解决故障之前系统无法继续)。

-XX:+UseCMSCompactAtFullCollection 告诉前台模式 运行 使用 serial old 进行压缩。它对完整的 GC 没有影响。

前台模式已在 Java 8 中弃用(并且 运行 进行完整 GC 是现在唯一的选择),标志也是如此。

结论

旗帜已死,请勿使用。