I switched to CMS collector for my application and throughput of application decreased by half. From GC logs, I see a high frequency of minor GCs happening (aroung 10 per second
). I have allocated a heap size of 4G
. The JVM be default is using very small size for young gen (less than 40MB
). I want to try out CMS via increasing the size of young gen. Can you point me to right JVM parameter for this.
- I tried -XX:NewRatio but JVM ignored this parameter and there was no change in young gen sizes
- My java version is
java version "1.6.0_14"
How did you set -XX:NewRatio
, and on which JVM version?
Anyway. It could be ignored if you are also setting -XX:MaxNewSize=size
, which is a feature, or if you are also setting -XX:+UseConcMarkSweepGC
which is a known bug.
It works for me:
The defaults (Java 7 64bit on 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
Now specifying the ratio parameters (roughly same result):
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
And then a totally different new/old and eden/survivor ratio:
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
Same works for Java 6 or client VM (just with different defaults).