当从该博客中阅读Really? iCMS? Really?时,有一条语句引起了我的注意:
并发阶段通常很长(请花几秒钟而不是几毫秒)。 如果CMS将单个硬件线程占用了多个 秒,在这段时间内应用程序将不会执行 几秒钟,会在 效果体验了世界停顿。
在抢占式操作系统上,这对我没有意义。我的假设是CMS正在运行一个或多个收集器线程。另一个假设是,我们不是在让CMS拥有专用的GC线程来执行垃圾回收,而是在讨论使应用程序线程将其逻辑与GC逻辑(时分多路复用)交错。
是这种情况吗?我这是怎么了?
谢谢
答案 0 :(得分:3)
在HotSpot JVM中,垃圾收集器(包括CMS和i-CMS)使用专用的工作线程。
CMS线程与应用程序线程并发运行,但是它们具有higher priority:NearMaxPriority
。在单核计算机上,CMS周期确实可能会使应用程序线程匮乏。 CMS增量模式的想法是使GC在不依赖OS调度程序的情况下自动将CPU分配给应用程序。
通常,CMS收集器在以下过程中使用一个或多个处理器: 整个并发跟踪阶段,无需自愿放弃 他们。同样,一个处理器用于整个并发扫描 阶段,无需放弃它。这样的开销可能太多 具有响应时间限制的应用程序的中断 否则可能会使用处理核心,尤其是在运行时 在只有一两个处理器的系统上。增量模式解决 通过将并发阶段分解为短脉冲串来解决此问题 活动,该活动计划在小暂停之间进行。
请注意,CMS增量模式was deprecated早在2012年。