为什么CMS全GC单线程?

时间:2016-09-19 09:25:45

标签: java garbage-collection concurrent-mark-sweep

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

1 个答案:

答案 0 :(得分:1)

没有特别的理由,除了它没有以这种方式实施,工程工作集中在G1。 CMS的大多数用户只是尝试以一种从未发生过的方式对其进行调整,而且#34;从不"意味着间隔大于任何需要JVM重启的间隔。并行旧收集器不能通过简单地调用其代码来重用,因为收集器之间的内部数据结构不同,因此它将涉及非平凡的实现工作。

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