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



阅读时 真的? iCMS?真?从这个博客中,有一句话引起了我的注意:

并发阶段通常很长(考虑秒而不是毫秒(。 如果 CMS 占用了多个硬件线程 秒,应用程序在这些期间不会执行 几秒钟,就会在 效果体验停止世界暂停。

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

是这样吗?我在这里做错了什么?

谢谢

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

CMS 线程与应用程序线程同时运行,但它们具有更高的优先级:NearMaxPriority。在单核机器上,CMS循环确实会使应用程序线程匮乏。CMS增量模式的想法是使GC自愿将CPU让给应用程序,而不依赖于操作系统调度程序。

来自热点 GC 调整指南:

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

请注意,CMS 增量模式很久以前在 2012 年就被弃用了。

最新更新