□OutOfMemoryについて


 Javaで通常、OutOfMemoryというと、Java OOM(OutOfMemory)の事を指す。

 これに対し、ネイティブ OOM(OutOfmemry)があり、OSからのヒープメモリを確保使用とした際、
 それが不足すると、発生します。

 これらを判別する方法は、Javaの標準出力にログが現れないものが、ネイティブOOMとなります。
 Unix系OSでは、syslogログにOutOfMemoryの旨エラーログが出力されることがあります。


 Java OOMが発生する場合、New+Old領域が不足した場合と、Permanent領域が不足した場合があります。
 Permanentはクラスのメタデータ等の為確保される領域で、デフォルト16MB 最大64MBとなっている。

 New+Old領域は、オブジェクトや、ハッシュデータなどが確保される領域で、New領域が、直ぐに解放
 されるもの、Old領域は長期間メモリに確保されるものとなり、Old領域に確保されるとFullGCが発生
 しない限り、不要となっても解放されない。メモリを確保しようとした時に、GCによっても必要な
 ヒープメモリが確保できない時に、OOMが発生する。


 New+Old領域が不足してOOMが発生する場合、単純に不足している場合と、メモリリークとメモリリーク
 に似た現象の場合が考えれられます。メモリリークの場合は、参照オブジェクトをfinalなどで、nullを
 アサインするなど、Jprobe等のプロファイラでも問題となりそうなコードを見つけることも出来ます。
最終更新:2006年09月20日 19:16