NewRatio参数不适用于CMS垃圾收集器

时间:2012-06-15 06:33:38

标签: java garbage-collection jvm jvm-hotspot jvm-arguments

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

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

2 个答案:

答案 0 :(得分:4)

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

反正。如果您还要设置-XX:MaxNewSize=size这是一项功能,或者您还设置了-XX:+UseConcMarkSweepGC known bug,则可以忽略此项。

答案 1 :(得分:1)

它对我有用:

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

java -Xmx4g -Xms4g -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
Heap
 par new generation   total 613440K, used 21813K
  eden space 545344K,   4% used
  from space 68096K,   0% used
  to   space 68096K,   0% used
 concurrent mark-sweep generation total 3512768K, used 0K
 concurrent-mark-sweep perm gen total 21248K, used 2084K

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

java -Xmx4g -Xms4g -XX:+PrintGCDetails -XX:NewRatio=6 -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -version
 par new generation   total 539264K, used 19174K
  eden space 479360K,   4% used
  from space 59904K,   0% used
  to   space 59904K,   0% used
 concurrent mark-sweep generation total 3595136K, used 0K
 concurrent-mark-sweep perm gen total 21248K, used 2084K

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

java -Xmx4g -Xms4g -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -version
 par new generation   total 1398144K, used 27965K
  eden space 699136K,   4% used
  from space 699008K,   0% used
  to   space 699008K,   0% used
 concurrent mark-sweep generation total 2097152K, used 0K
 concurrent-mark-sweep perm gen total 21248K, used 2084K

与Java 6或客户端VM相同(仅具有不同的默认值)。