我在 CMS GC 中使用 jdk 1.6,当我尝试迁移到 JDK 1.7 时,堆使用量增加并且进程变慢。
这些版本中的 GC 行为是否存在重大差异?如果它在 JDK 1.7 中变慢了,解决方法是什么?
我在 CMS GC 中使用 jdk 1.6,当我尝试迁移到 JDK 1.7 时,堆使用量增加并且进程变慢。
这些版本中的 GC 行为是否存在重大差异?如果它在 JDK 1.7 中变慢了,解决方法是什么?
在 jdk 1.7 以下是与 cms 相关的 2 个主要变化。
并发标记扫描收集器 (CMS) 的默认开箱即用堆大小和形状参数已被修改。新设置利用了自 JDK 6 发布以来引入的更快平台。与 HotSpot 中的其他收集器一样,CMS 现在将使用平台上可用的物理内存来调整其堆的大小,同时尝试调整该堆以保持与次要收集相关的暂停时间“合理”。堆的特定形状也可能以其他方式依赖于平台。用户可以通过显式调整堆的大小或调整堆大小(也称为“堆调整”)来覆盖所有或部分默认设置,以满足他们的特定需求。
JDK 6 发行说明包括 CMS 的性能增强。为了提供一种机制来继续使用 JDK 5 提供的行为,提供了 CMSUseOldDefaults 标志。该标志将许多设置恢复为默认状态。在过去的几年里,这个标志的使用很少,大多数客户更喜欢改进的 CMS 性能。现在 jdk7 中删除了 CMSUseOldDefaults 标志。
来源:JDK 7 中的 Java 虚拟机增强