4

我观察到,当没有最近的 ParNew 时,如果 CMS-Initial-Mark 阶段开始,CMS-Initial-Mark 阶段需要更长的时间来标记老年代中的对象。

好的部分是我发现 ParNew 的大部分时间(可能是偶然的或 JVM 在内部执行此操作)发生在 CMS-Initial-Mark 阶段之前,然后在老年代标记相同数量的对象,CMS 花费的时间更少。

想知道这个观察背后的原因。

注意:考虑到 CMS-Initial-Mark 阶段是 stop-the-world,应尽最大努力减少其持续时间。

4

1 回答 1

7

通常 CMS 初始标记搭载在年轻集合上。CMS 可以等待年轻收集一段时间(默认为 2 秒)。如果没有发生,初始标记将使用单线程扫描所有年轻空间,这可能非常耗时。

阅读http://blog.ragozin.info/2011/06/understanding-gc-pauses-in-jvm-hotspots_02.html了解更多详情。

HotSpot 选项 –XX:CMSWaitDuration=<delay in ms> 控制 CMS 初始标记可以延迟多长时间以搭载年轻收集。

于 2012-05-20T06:42:01.090 回答