我观察到当没有最近的 ParNew 并且如果 CMS-Initial-Mark 阶段开始时,CMS-Initial-Mark 阶段需要更长的时间来标记老年代的对象。
好的部分是大多数时候我发现 ParNew(可能是偶然的或者 JVM 在内部这样做)发生在 CMS-Initial-Mark 阶段之前,然后在老年代标记相同数量的对象,CMS 花费的时间更少。
想知道这种观察背后的推理。
注意:考虑到 CMS-Initial-Mark 阶段是 stop-the-world,最好尝试减少其持续时间。
最佳答案
通常 CMS 初始标记搭载在年轻集合上。 CMS 可以等待年轻集合一段时间(默认为 2 秒)。如果没有发生,初始标记将使用单线程扫描所有年轻空间,这可能非常耗时。
阅读 http://blog.ragozin.info/2011/06/understanding-gc-pauses-in-jvm-hotspots_02.html更多细节。
HotSpot 选项 –XX:CMSWaitDuration=
关于garbage-collection - ParNew 和 CMS-初始相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10669482/