JVM can set NewSize and MaxNewSize ergonomically however these values can be too small when NewSize=0.
Examples:
java -XX:+UseSerialGC -XX:NewSize=0 -Xmx50m -Xms30m -XX:+PrintFlagsFinal -version 2>&1 | grep -i "\(max\|initial\)heapsize\|\(max\)\?newsize \|initialization "
size_t InitialHeapSize := 31457280 {product}
size_t MaxHeapSize := 52428800 {product}
size_t MaxNewSize := 17432576 {product}
size_t NewSize := 196608 {product}
Error occurred during initialization of VM
GC triggered before VM initialization completed. Try increasing NewSize, current value 192K.
java -XX:+UseSerialGC -XX:NewSize=0 -Xmx50m -Xms40m -XX:+PrintFlagsFinal -version 2>&1 | grep -i "\(max\|initial\)heapsize\|\(max\)\?newsize \|initialization "
size_t InitialHeapSize := 41943040 {product}
size_t MaxHeapSize := 52428800 {product}
size_t MaxNewSize := 17432576 {product}
size_t NewSize := 6946816 {product}
java -XX:+UseSerialGC -XX:NewSize=0 -Xmx50m -Xms50m -XX:+PrintFlagsFinal -version 2>&1 | grep -i "\(max\|initial\)heapsize\|\(max\)\?newsize \|initialization "
size_t InitialHeapSize := 52428800 {product}
size_t MaxHeapSize := 52428800 {product}
size_t MaxNewSize := 196608 {product}
size_t NewSize := 196608 {product}
Error occurred during initialization of VM
GC triggered before VM initialization completed. Try increasing NewSize, current value 192K.
It is seen that NewSize and MaxNewSize are set wrong on tested machine.
Heap sizes:
-Xmx50m -Xms50m -> NewSize ==192k MaxNewSize == 192k
-Xmx50m -Xms40m -> NewSize = 6946816 MaxNewSize = 17432576
-Xmx50m -Xms30m -> NewSize = 192k MaxNewSize = 17432576
Affected GC - Serial and CMS.
Issue was found during working on https://bugs.openjdk.java.net/browse/JDK-8161604
Examples:
java -XX:+UseSerialGC -XX:NewSize=0 -Xmx50m -Xms30m -XX:+PrintFlagsFinal -version 2>&1 | grep -i "\(max\|initial\)heapsize\|\(max\)\?newsize \|initialization "
size_t InitialHeapSize := 31457280 {product}
size_t MaxHeapSize := 52428800 {product}
size_t MaxNewSize := 17432576 {product}
size_t NewSize := 196608 {product}
Error occurred during initialization of VM
GC triggered before VM initialization completed. Try increasing NewSize, current value 192K.
java -XX:+UseSerialGC -XX:NewSize=0 -Xmx50m -Xms40m -XX:+PrintFlagsFinal -version 2>&1 | grep -i "\(max\|initial\)heapsize\|\(max\)\?newsize \|initialization "
size_t InitialHeapSize := 41943040 {product}
size_t MaxHeapSize := 52428800 {product}
size_t MaxNewSize := 17432576 {product}
size_t NewSize := 6946816 {product}
java -XX:+UseSerialGC -XX:NewSize=0 -Xmx50m -Xms50m -XX:+PrintFlagsFinal -version 2>&1 | grep -i "\(max\|initial\)heapsize\|\(max\)\?newsize \|initialization "
size_t InitialHeapSize := 52428800 {product}
size_t MaxHeapSize := 52428800 {product}
size_t MaxNewSize := 196608 {product}
size_t NewSize := 196608 {product}
Error occurred during initialization of VM
GC triggered before VM initialization completed. Try increasing NewSize, current value 192K.
It is seen that NewSize and MaxNewSize are set wrong on tested machine.
Heap sizes:
-Xmx50m -Xms50m -> NewSize ==192k MaxNewSize == 192k
-Xmx50m -Xms40m -> NewSize = 6946816 MaxNewSize = 17432576
-Xmx50m -Xms30m -> NewSize = 192k MaxNewSize = 17432576
Affected GC - Serial and CMS.
Issue was found during working on https://bugs.openjdk.java.net/browse/JDK-8161604
- relates to
-
JDK-8163862 [TESTBUG] Cover cases when initial young and old gen sizes in sum are not equal to all heap size.
-
- Open
-
-
JDK-8163863 [TESTBUG] Test TestNewSizeFlags should cover case NewSize=0
-
- Open
-
-
JDK-8161604 TestNewSizeFlags fails with RuntimeException: max new size != MaxNewSize value
-
- Resolved
-