-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 是现在唯一的选择),标志也是如此。
结论
旗帜已死,请勿使用。
我理解它告诉 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 是现在唯一的选择),标志也是如此。
结论
旗帜已死,请勿使用。