FJVMでは、メモリ領域不足事象発生時に出力されるメッセージ情報の強化を行なっています。
これによりFJVMでは、メモリ領域不足事象が発生した場合に、java.lang.OutOfMemoryErrorの例外メッセージ情報に加え、不足した領域の種別情報を図1の形式で出力します。
図1 メモリ領域不足事象が発生した場合に出力される不足した領域の種別情報
The memory was exhausted area_name |
area_name: | メモリ領域不足事象が発生した領域の名前や領域不足となったオブジェクトの要求サイズ(不足領域情報)を表示します。
|
heap_size: | メモリ領域不足事象が発生した際に使用中となっているメモリ割り当てプールのサイズ(単位:byte)。 |
max_heap_size: | 利用可能なメモリ割り当てプールの最大サイズ(単位:byte)。 |
perm_size: | メモリ領域不足事象が発生した際に使用中となっているPermanent世代領域のサイズ(単位:byte)。 |
max_perm_size: | 利用可能なPermanent世代領域の最大サイズ(単位:byte)。 |
メモリ領域不足事象が発生した際に出力される各領域の使用中サイズ(heap_size、perm_size)には、メモリ領域不足の原因となったオブジェクトの大きさは含まれません。
そのため巨大サイズのオブジェクト生成要求などによりメモリ領域不足事象が発生した場合には、「最大サイズ」と「使用中サイズ」の差が大きい場合(空き領域がたくさんあるように見える場合)がありますので注意してください。
メモリ割り当てプールに対してメモリ領域不足事象が発生した場合に出力されるheap_sizeの値は、New世代領域での使用中サイズとOld世代領域での使用中サイズの合計値です。
New世代領域とOld世代領域は別々のオブジェクト格納域として管理・制御されますから、max_heap_sizeとheap_sizeの差の大きさが、そのまま生成要求できるオブジェクトの最大サイズにはなりませんので注意してください。
図2 メモリ領域不足事象が発生した場合に出力されるメッセージ出力例
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space |
図2の出力例の場合、4016バイトのオブジェクト生成要求において、メモリ割り当てプールに対してメモリ領域不足が発生したことを確認することができます。