If your application is running in a container that imposes a memory limit, the VM allocates a larger fraction of memory to the Java heap. To turn off this behavior, set the
-XX:-UseContainerSupport option on the command line.
When using container technology, applications are typically run on their own and do not need to compete for memory. The Eclipse OpenJ9™ VM detects when it is running inside a container that imposes a memory limit, and adjusts the maximum Java heap size appropriately.
The following table shows the values that are used when
-XX:+UseContainerSupport is set:
|Container memory limit <size>||Maximum Java heap size|
|Less than 1 GB||50% <size>|
|1 GB - 2 GB||<size> - 512 MB|
|Greater than 2 GB||75% <size>|
The default heap size is capped at 25 GB, which is the limit of heap size for 3-bit shift of compressed references (see -Xcompressedrefs), to prevent silent switching to 4-bit shift of compressed references, which has possible performance penalties. You can use the
-Xmx option or the
-XX:MaxRAMPercentage option to overwrite the 25 GB limit.
The default heap size for containers takes affect only when the following conditions are met:
- The application is running in a container environment.
- The memory limit for the container is set.
-XX:+UseContainerSupportoption is set, which is the default behavior.
To prevent the VM adjusting the maximum heap size when running in a container, set
-XX:InitialRAMPercentage are used with
-XX:+UseContainerSupport, the corresponding heap setting is determined based on the memory limit of the container. For example, to set the maximum heap size to 80% of the container memory, specify the following options:
Note: If you set a value for
-XX:InitialRAMPercentage option is ignored.
If you set a value for
-XX:MaxRAMPercentage option is ignored.