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

Java NewRatio参数不适用于CMS垃圾收集器,java,garbage-collection,jvm,jvm-hotspot,jvm-arguments,Java,Garbage Collection,Jvm,Jvm Hotspot,Jvm Arguments,我将应用程序切换到CMS收集器,应用程序的吞吐量减少了一半。从GC日志中,我看到发生小型GC的频率很高(大约每秒10次)。我已经分配了4G的堆大小。JVM默认为young gen使用非常小的大小(小于40MB)。我想通过增加young gen的大小来尝试CMS。您能为我指出正确的JVM参数吗 我尝试了-XX:NewRatio,但JVM忽略了这个参数,年轻一代的大小没有变化 我的java版本是java版本“1.6.0_14” 如何设置-XX:NewRatio,以及在哪个JVM版本上设置 无论如何

我将应用程序切换到CMS收集器,应用程序的吞吐量减少了一半。从GC日志中,我看到发生小型GC的频率很高(大约每秒10次)。我已经分配了
4G
的堆大小。JVM默认为young gen使用非常小的大小(小于
40MB
)。我想通过增加young gen的大小来尝试CMS。您能为我指出正确的JVM参数吗

  • 我尝试了-XX:NewRatio,但JVM忽略了这个参数,年轻一代的大小没有变化
  • 我的java版本是
    java版本“1.6.0_14”

如何设置
-XX:NewRatio
,以及在哪个JVM版本上设置

无论如何。如果您同时设置了一项功能,即
-XX:MaxNewSize=size
,或者您同时设置了一项功能,即
-XX:+UseConMarkSweepGC
,则可以忽略此选项。

它适用于我:

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

java-Xmx4g-Xms4g-XX:+PrintGCDetails-XX:+useConMarkSweepGC-XX:+UseParNewGC-version java版本“1.7.0_07” Java(TM)SE运行时环境(build 1.7.0_07-b10) Java HotSpot(TM)64位服务器虚拟机(构建23.3-b01,混合模式) 堆 PAR新一代总计613440K,使用21813K 伊甸园空间545344K,使用率4% 从空间68096K,已使用0% 到空间68096K,已使用0% 并发标记扫描生成总计3512768K,已使用0 k 并发标记扫描perm gen总计21248K,使用2084K 现在指定比率参数(大致相同的结果):

java-Xmx4g-Xms4g-XX:+PrintGCDetails-XX:NewRatio=6-XX:surviorratio=8-XX:+useConMarkSweepGC-XX:+UseParNewGC-version PAR新一代总计539 264K,使用19174K 伊甸园空间479360K,使用率4% 从空间59904K开始,0%已使用 到空间59904K,已使用0% 并发标记扫描生成总计3595136K,已使用0K 并发标记扫描perm gen总计21248K,使用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-Xmx4g-Xms4g-XX:+PrintGCDetails-XX:NewRatio=1-XX:surviorratio=1-XX:+useConMarkSweepGC-XX:+UseParNewGC-version PAR新一代总计1398144K,使用 伊甸园空间699136K,使用率4% 从空间699008K,0%已使用 至空间699008K,已使用0% 并发标记扫描生成总计2097152K,已使用0K 并发标记扫描perm gen总计21248K,使用2084K
同样适用于Java 6或客户端VM(只是默认值不同)。

您使用的是哪个版本的Java?你能试试Java 6 udpate 33吗?非常感谢。事实正是如此。我在
java版本“1.6.0_14”
上同时使用了
-XX:+useConMarkSweepGC
-XX:NewRatio
。我想我会升级我的JVM并尝试一下。 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