あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

OutOfMemoryError発生

連続動作のテストを、まる1日やっていると、200件目ぐらいでOutOfMemoryError が発生し、それ以降、メモリ不足で、処理ができなくなってしまった。

対応としては、

  • 使用していない無駄なメンバーフィールドやメソッド変数、バッファがないかチェックして、あれば削除する。
  • 頻繁にオブジェクトを生成している部分は、オブジェクトの再利用を検討して、なるべくオブジェクトを new する回数を減らすようにする。
  • 一度、生成したオブジェクトでの処理が終了した後、メンバーフィールドにHashtable, Vector等がある場合、clear() して登録オブジェクトへの参照をnullにしておく。
  • アプリケーション起動時に、java起動オプションの -Xmx値 -Xms値で指定する値を、大きくする。(JVMのメモリ最大サイズ指定とメモリ初期サイズ指定)
  • 処理終了直後に、System#gc() を、呼び出して、ガーベージコレクションの実行を催促する。
  • 処理終了後に、JVMのトータルメモリとフリーメモリを表示させて、メモリ容量を、チェックする。(メモリ確認)

以上の対応で、OutOfMemoryErrorの発生を、なんとか抑えることができた。