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

标签 java garbage-collection concurrent-mark-sweep

我知道它告诉 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/

相关文章:

java - JTextField 可滚动,无需 JScrollBar

java - 检查数组是否包含具有递归和某些限制的 int

java - GC 日志旋转数据在应用程序重启时丢失

ruby - 你有什么策略来保持低内存使用率?

java - 并发标记清除收集发生得不够频繁

java - 并发标记清除 (CMS) 卸载类中的对象类

java GC算法微调: CMS algorithm alone & combination

java - 为什么我们需要 (HEX | OCT)_to_DEC 方法?

java - 是否有任何数据结构可以保留迭代顺序并删除旧记录?

java - 此 java 对象是否符合 List 中的垃圾回收条件