2014年8月23日土曜日

jvmのメモリ、最小と最大(XmsとXmx)

技術系ネタ。

JVMを起動するときにヒープサイズを指定するオプションに
XmsとXmxがある。最小サイズと最大サイズ。いままで認識間違っていた。

例えば、eclipseを起動するときに
Xmsに256mとかXmxに512mとか指定している。
上記の場合は最初にヒープメモリを256mを確保して、必要が有れば512mまで拡大する。
だけど、そこで疑問が、
ヒープメモリが256m以上必要になって拡大するときに空きメモリが足りなければどうなるんだろう?
いままではエラーで落ちると思っていた。

だけど、実は
「JVMは起動時に最大ヒープサイズ分領域を確保する。」らしい。
なので、拡大するときにメモリが足りないなんて事はないみたい。
じゃあ、最小サイズなんて指定いらないんじゃない?って思うが
最大サイズ分確保するだけで、最初に割り当て(コミット)するのは最小サイズみたい。

ちょっとややこしいけど、
起動時に最大サイズでここまで使いますよって線引いて
(この時点で他のアプリからの使用はできなくなる)、
実際に使う準備をするのは最小サイズって感じかな。

よく最小サイズと最大サイズを合わせておこうっていうのは、
実行時の最小サイズを超えた分への割り当ての時間を省略するため。
まあその分、起動時に時間かかるけど起動時なんて別に時間かかっても良いし。
だけど、起動を何回も繰り返すような場合は最小サイズは小さくした方が良い。

なるほど、いままで勘違いしていたのでメモ書き。

0 件のコメント:

コメントを投稿