NewRatio参数不与CMS垃圾收集器一起使用

我为我的应用程序切换到CMS收集器,应用程序的吞吐量减少了一半。 从GC日志中,我发现很少发生轻微的GC(每秒10 per second )。 我已经分配了4G的堆大小。 默认情况下,JVM使用非常小的尺寸(小于40MB )。 我想通过增加年轻人的规模来尝试CMS。 你能指点我正确的JVM参数吗?

  • 我尝试了-XX:NewRatio但是JVM忽略了这个参数,并且年轻的gen大小没有变化
  • 我的java版本是java version "1.6.0_14"

你是如何设置-XX:NewRatio ,以及哪个JVM版本的?

无论如何。 如果您还要设置-XX:MaxNewSize=size (这是一项function),或者您还要设置-XX:+UseConcMarkSweepGC这是一个已知错误 ,则可以-XX:+UseConcMarkSweepGC它。

这个对我有用:

默认值(Windows上的Java 7 64位):

 java -Xmx4g -Xms4g -XX:+ PrintGCDetails -XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC -version
 java版“1.7.0_07”
 Java(TM)SE运行时环境(版本1.7.0_07-b10)
 Java HotSpot(TM)64位服务器VM(内置23.3-b01,混合模式)
堆
 新一代共计613440K ,使用21813K
  伊甸园空间545344K,使用4%
  从space 68096K,使用0%
  空间68096K,使用0%
 并发标记扫描生成总计3512768K ,使用0K
  concurrent-mark-sweep perm gen total 21248K,使用2084K

现在指定比率参数(大致相同的结果):

 java -Xmx4g -Xms4g -XX:+ PrintGCDetails -XX:NewRatio = 6 -XX:SurvivorRatio = 8 -XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC -version
  par新一代总计539264K ,使用19174K
  伊甸园空间479360K,使用4%
  从space 59904K,使用0%
  到空间59904K,使用0%
 并发标记扫描生成总计3595136K ,使用0K
  concurrent-mark-sweep perm gen total 21248K,使用2084K

然后是一个完全不同的新/旧和伊甸园/幸存者比例:

 java -Xmx4g -Xms4g -XX:+ PrintGCDetails -XX:NewRatio = 1 -XX:SurvivorRatio = 1 -XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC -version
  par新一代总计1398144K ,使用27965K
  伊甸园空间699136K,使用4%
  来自太空699008K,0%使用
  空间699008K,使用0%
 并发标记扫描生成总计2097152K ,使用0K
  concurrent-mark-sweep perm gen total 21248K,使用2084K

对于Java 6或客户端VM也是如此(仅具有不同的默认值)。