JVMの初期ヒープメモリ割り当て[重複]

Dec 07 2020

-Xmsと-Xmxの値を同じように4GBと指定しました。スプリングブートアプリケーションを起動したとき、OSはアプリケーションの起動直後に4GBのメモリを割り当てると想定していました。これは、-Xms引数を使用して指定された値であるためです。しかし、アプリケーションの常駐セットとヒープメモリ(JMXを使用)を確認すると、割り当てられたメモリがまだ1GB未満であることがわかります。つまり、OSは必ずしも-Xmsを使用して指定されたメモリを割り当てるとは限りません。

前もって感謝します。

回答

JurajMartinka Dec 07 2020 at 12:23

どのOSとどのJVMベンダー/バージョンを指定していませんが、多くの場合、OSはページを遅延して割り当てます。つまり、必要な場合を除いて、ページはRAM(「常駐」)にありません。アプリケーションが実際にそのヒープメモリを必要としない場合、それは常駐しません。また、占有率が低すぎる場合、「-Xms」より下でもヒープが縮小する可能性がある「適応サイズポリシー」があります。https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gc-ergonomics.html