RFR: 8222252 - Java ergonomics limits heap to 128GB with disabled compressed oops

Bob Vandette bob.vandette at oracle.com
Mon May 13 14:03:10 UTC 2019


Please review this suggested fix for correcting Heap size selection when
-XX:{Max,Min,Initial)RAMPercentage and their Factional equivalent options
are used.

There are two bugs filed that are related to this issue (8222252 and 8213175)

SUMMARY of FIX:
The fix corrects what I believe is an incorrect implementation of the *Percentage/*Fraction
options.  These options should not have caused the heap size to be fractionally based on MaxRAM
or limited by MaxRAM.  They instead should be based on the host memory. This is what I assume
was meant by “real memory”.  

 product(double, MaxRAMPercentage, 25.0,                                   \
         "Maximum percentage of real memory used for maximum heap size") \
         range(0.0, 100.0) 

When these options are selected, they should take precedence over UseCompressedOops
unless UseCompressedOops is also specified on the command line.


WEBREV:
http://cr.openjdk.java.net/~bobv/8222252/webrev.01

BUGS:
https://bugs.openjdk.java.net/browse/JDK-8222252
Java ergonomics limits heap to 128GB with disabled compressed oops

https://bugs.openjdk.java.net/browse/JDK-8213175
Java ergonomics limits heap to 32GB to allow compressed oops


RESULTS TABLE:

On a System with 148G of RAM

./java -XX:MaxRAM=192g -XX:+PrintFlagsFinal -version | grep MaxHeapSize
   size_t MaxHeapSize                              = 32178700288                               {product} {ergonomic}
./java -XX:MaxRAM=192g -XX:+PrintFlagsFinal -version | grep UseCompressedOops
     bool UseCompressedOops                        = true                                 {lp64_product} {ergonomic}

./java -XX:MaxRAM=192g -XX:MaxRAMPercentage=75 -XX:+PrintFlagsFinal -version | grep MaxHeapSize
   size_t MaxHeapSize       [ORIG]                 = 32178700288                               {product} {ergonomic}
   size_t MaxHeapSize       [NEW]                  = 113883742208                              {product} {ergonomic}
./java -XX:MaxRAM=192g -XX:MaxRAMPercentage=75 -XX:+PrintFlagsFinal -version | grep UseCompressedOops
     bool UseCompressedOops [ORIG]                 = true                                 {lp64_product} {ergonomic}
     bool UseCompressedOops [NEW]                  = false                                {lp64_product} {ergonomic}

./java -XX:MaxRAMPercentage=10 -XX:+PrintFlagsFinal -version | grep MaxHeapSize
   size_t MaxHeapSize       [ORIG]                 = 13744734208                               {product} {ergonomic}
   size_t MaxHeapSize       [NEW]                  = 15183380480                               {product} {ergonomic}
./java -XX:MaxRAMPercentage=10 -XX:+PrintFlagsFinal -version | grep UseCompressedOops
     bool UseCompressedOops                        = true                                 {lp64_product} {ergonomic}

./java -XX:+PrintFlagsFinal -version | grep MaxHeapSize
   size_t MaxHeapSize                              = 32178700288                               {product} {ergonomic}
./java -XX:+PrintFlagsFinal -version | grep UseCompressedOops
     bool UseCompressedOops                        = true                                 {lp64_product} {ergonomic}

./java -XX:-UseCompressedOops -XX:+PrintFlagsFinal -version | grep MaxHeapSize
   size_t MaxHeapSize                              = 34359738368                               {product} {ergonomic}
./java -XX:-UseCompressedOops -XX:+PrintFlagsFinal -version | grep UseCompressedOops
     bool UseCompressedOops                        = false                                {lp64_product} {command line}

./java -XX:+UseCompressedOops -XX:MaxRAM=128g -XX:+PrintFlagsFinal -version | grep MaxHeapSize
   size_t MaxHeapSize                              = 32178700288                               {product} {ergonomic}
./java -XX:+UseCompressedOops -XX:MaxRAM=128g -XX:+PrintFlagsFinal -version | grep UseCompressedOops
     bool UseCompressedOops                        = true                                 {lp64_product} {command line}

./java -XX:+UseCompressedOops -XX:MaxRAMPercentage=75 -XX:+PrintFlagsFinal -version | grep MaxHeapSize
   size_t MaxHeapSize                              = 32178700288                               {product} {ergonomic}
./java -XX:+UseCompressedOops -XX:MaxRAMPercentage=75 -XX:+PrintFlagsFinal -version | grep UseCompressedOops
     bool UseCompressedOops                        = true                                 {lp64_product} {command line}



Bob.



More information about the hotspot-runtime-dev mailing list