我知道它告诉 CMS 收集器在发生完整 GC 时对旧代进行压缩。
但我想确认我是否理解正确(从各种来源拼凑而成):
完整的GC将暂停世界,收集并压缩旧代(使用CMS的备注阶段的结果),然后收集年轻代,提升对象(如果有),并恢复世界。
此时,旧代中可能存在 float 垃圾,UseCMSCompactAtFullCollection
就是清理它们并再次压缩旧代(基本上是旧代上的另一次 GC)。因为无论如何世界都停止了,所以可能值得做更多的压缩。
这个描述正确吗?我是否遗漏了任何重要细节?谢谢
最佳答案
这张票是一个很好的答案:https://bugs.openjdk.java.net/browse/JDK-8027132
基本上我的理解是正确的。有一个前台 CMS 模式,当出现分配失败时,它会从后台模式中恢复(因为在解决故障之前系统无法继续)。
-XX:+UseCMSCompactAtFullCollection
告诉前台模式使用串行旧版本运行压缩。它对完整 GC 没有影响。
前台模式在 Java 8 中已被弃用(现在运行完整的 GC 是唯一的选择),标志也是如此。
结论
该标志已失效,请勿使用。
关于java - -XX+UseCMSCompactAtFullCollection 的确切用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34502931/