戯言

つらつらと気づいたことを書いていきます。人狼とか。

2013年03月14日 の記事一覧

Javaのヒープ領域は大きく確保すべき?


「JavaVM 領域は大きいほど、プログラムで使用するメモリ使用量が増えても安心」・・・ 確かにメモリリークしている場合などは多少延命するかもしれませんが、大抵の場合でJavaVM 領域を大きくとることは得策ではありません

JavaVM 領域が大きいと、FullGCに時間がかかり、さらにはOS固有領域を少なくしてしまいます。

JavaVM領域は、
・なるべく小さくして、短時間(0.5秒以下くらいか?)のFullGCで開放できるようにする。
・過負荷時でもJavaVM領域が溢れない大きさは確保する。

これがベストです。

どの程度の大きさが良いかは、
% jstat –gcutil <PID> <interval> でGC時間やメモリ使用量を確認しながら、調整しましょう。


最低限知っておくべきJavaメモリ空間構造と設定パラメータ
メモリ空間構造

OutOfMemoryは、ヒープが足りない場合、パーマネントが足りない場合、OS領域が足りない場合のいずれでも発生します。

  • Javaプログラムでオブジェクトの廃棄ができていない場合は、ヒープやパーマネントが枯渇していきます。

  • ファイルI/Oオブジェクトやスレッドの破棄ができていない場合は、OS領域が枯渇していきます。


なお、Javaの起動オプションでは、JavaVM領域のメモリ設定はできるが、OS固有領域の設定はできません。(例外として、1スタックの上限値は設定可)

参考


http://d.hatena.ne.jp/tanakakns/20120508/1336467306
完結にまとまっている。知識がある人向け。

http://www.atmarkit.co.jp/fjava/rensai4/trouble_knowhow04/01.html
OutOfMemory発生時の対象方法。

http://www.itmedia.co.jp/enterprise/articles/0905/27/news002.html
メモリ構造、GCの仕組み。

http://l25.blog130.fc2.com/blog-entry-152.html

http://gihyo.jp/dev/serial/01/jvm-arc
挙げた中では最もボリュームがある記事量。メモリ空間の構造、利用のされ方、GC、チューニングまでわかりやすい。
スポンサーサイト