-XX:+ CMSIncrementalMode是否在应用程序线程或GC专用线程上运行?

时间:2019-11-24 23:57:20

标签: garbage-collection jvm jvm-hotspot

当从该博客中阅读Really? iCMS? Really?时,有一条语句引起了我的注意:

  

并发阶段通常很长(请花几秒钟而不是几毫秒)。   如果CMS将单个硬件线程占用了多个   秒,在这段时间内应用程序将不会执行   几秒钟,会在   效果体验了世界停顿。

在抢占式操作系统上,这对我没有意义。我的假设是CMS正在运行一个或多个收集器线程。另一个假设是,我们不是在让CMS拥有专用的GC线程来执行垃圾回收,而是在讨论使应用程序线程将其逻辑与GC逻辑(时分多路复用)交错。

是这种情况吗?我这是怎么了?

谢谢

1 个答案:

答案 0 :(得分:3)

在HotSpot JVM中,垃圾收集器(包括CMS和i-CMS)使用专用的工作线程。

CMS线程与应用程序线程并发运行,但是它们具有higher priorityNearMaxPriority。在单核计算机上,CMS周期确实可能会使应用程序线程匮乏。 CMS增量模式的想法是使GC在不依赖OS调度程序的情况下自动将CPU分配给应用程序。

来自HotSpot GC Tuning Guide

  

通常,CMS收集器在以下过程中使用一个或多个处理器:   整个并发跟踪阶段,无需自愿放弃   他们。同样,一个处理器用于整个并发扫描   阶段,无需放弃它。这样的开销可能太多   具有响应时间限制的应用程序的中断   否则可能会使用处理核心,尤其是在运行时   在只有一两个处理器的系统上。增量模式解决   通过将并发阶段分解为短脉冲串来解决此问题   活动,该活动计划在小暂停之间进行。

请注意,CMS增量模式was deprecated早在2012年。

相关问题