我切换到CMS收集我的应用程序和吞吐量的应用减少了一半。 从GC日志,我看到次要GC的高频发生(aroung 10 per second
)。 我已经分配的堆大小4G
。 该JVM是默认使用非常小的尺寸为年轻代(小于40MB
)。 我想通过增加年轻代的尺寸,以尝试CMS。 你可以点我正确的JVM参数此。
- 我想-XX:NewRatio但JVM忽略此参数,并且有在年轻代的尺寸没有变化
- 我的Java版本
java version "1.6.0_14"
我切换到CMS收集我的应用程序和吞吐量的应用减少了一半。 从GC日志,我看到次要GC的高频发生(aroung 10 per second
)。 我已经分配的堆大小4G
。 该JVM是默认使用非常小的尺寸为年轻代(小于40MB
)。 我想通过增加年轻代的尺寸,以尝试CMS。 你可以点我正确的JVM参数此。
java version "1.6.0_14"
你是如何设置-XX:NewRatio
,并在其上JVM版本?
无论如何。 它可以被忽略,如果你也设置-XX:MaxNewSize=size
,这是一个功能,或者如果您还设置-XX:+UseConcMarkSweepGC
这是一个已知的bug 。
这个对我有用:
默认值(Java 7的64位Windows上):
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(只是不同的默认值)。