【问题标题】:Does -XX:+CMSIncrementalMode run on application threads or in GC-dedicated threads?-XX:+CMSIncrementalMode 是在应用程序线程还是在 GC 专用线程上运行?
【发布时间】:2019-11-24 23:57:20
【问题描述】:

在阅读此博客中的Really? iCMS? Really? 时,有一句话引起了我的注意:

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

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

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

谢谢

【问题讨论】:

    标签: garbage-collection jvm jvm-hotspot


    【解决方案1】:

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

    CMS 线程与应用程序线程同时运行,但它们有higher priority:NearMaxPriority。在单核机器上,CMS 循环确实会使应用程序线程饿死。 CMS 增量模式的想法是让 GC 自愿将 CPU 让给应用程序,而不依赖于 OS 调度程序。

    来自HotSpot GC Tuning Guide

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 2019-03-09
      • 2020-11-28
      • 1970-01-01
      相关资源
      最近更新 更多