java - 为什么CMS Full GC是单线程的?

标签 java garbage-collection concurrent-mark-sweep

每当使用 CMS 出现并发模式失败或升级失败时,它都会使用单线程执行完整 GC。为什么不能使用并行收集器进行 Full GC 来减少 Full GC 惩罚?

最佳答案

除了没有以这种方式实现并且工程工作集中在 G1 之外,没有什么特别的原因。 CMS 的大多数用户只是尝试以一种永远不会发生的方式对其进行调整,“从不”意味着间隔大于 JVM 重新启动所需的时间间隔。并行旧收集器不能通过简单地调用其代码来重用,因为收集器之间的内部数据结构不同,因此这将涉及不平凡的实现工作。

Google 开发人员有 proposed一个patch向 CMS 贡献并行完整 GC,但我不指望它很快就会在任何 openjdk 版本中可用。

关于java - 为什么CMS Full GC是单线程的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39569649/

相关文章:

java - 用Java读取属性文件

java - 根据 RFC 测试 vector 计算 Java 中的 ECDSA 签名

c++ - gcroot 的这种用法安全吗?

Java GC CMS 收集器时间

java - 即使内存被回收,并发模式也会失败

java - JSON Jackson - 使用自定义序列化程序序列化多态类时出现异常

java - 如何将文件中所有使用的 ASCII 字符放入字典/数组/列表中并为每个字符分配一个值?

java - JMH 基准迭代中的随机峰

c# - XAML 按钮在消除引用后未被垃圾回收

java - 为什么 JVM 不断进行 full gc,而老一代只有半满?