Java11のHeapメモリサイズを指定しようとしたらいつの間にか%で指定できるようになっていた。
以下のオプションが関連してくるようだが、使用するのは InitialRAMPercentage と MaxRAMPercentage MinRAMPercentageが最小割当サイズと勘違いしたが、200MB未満でしか使用されないプロパティだった。
InitialRAMPercentage
MaxRAMPercentage
MinRAMPercentage
MaxRAM
MaxRAMFraction
16GBの物理マシンで実行
C:\Users\szk>java -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -XshowSettings:vm -XX:+PrintFlagsFinal --version | grep -Ei "maxheapsize | maxram"
size_t MaxHeapSize = 11920211968 {product} {ergonomic}
uint64_t MaxRAM = 137438953472 {pd product} {default}
uintx MaxRAMFraction = 4 {product} {default}
double MaxRAMPercentage = 70.000000 {product} {command line}
size_t ShenandoahSoftMaxHeapSize = 0 {manageable} {default}
VM settings:
Max. Heap Size (Estimated): 11.10G
Using VM: OpenJDK 64-Bit Server VM
コンテナのメモリ制限にも対応しているようだ。
C:\Users\szk>docker run -m 1GB amazoncorretto:11 java -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -XshowSettings:vm -XX:+PrintFlagsFinal --version | grep -Ei "maxheapsize | maxram"
size_t MaxHeapSize = 752877568 {product} {ergonomic}
uint64_t MaxRAM = 137438953472 {pd product} {default}
uintx MaxRAMFraction = 4 {product} {default}
double MaxRAMPercentage = 70.000000 {product} {command line}
size_t ShenandoahSoftMaxHeapSize = 0 {manageable} {default}
VM settings:
Max. Heap Size (Estimated): 694.12M
Using VM: OpenJDK 64-Bit Server VM