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 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: