Java.lang.OutOfMemoryError対策覚え書き

オブジェクトaに入れるべきデータa0,a1が同時に確保できるほどのヒープ領域が存在しない場合(どちらか片方であれば確保できるとする)、

a = a0;
a = a1; // エラー

だと、a0に対してGCを働かせるのがa1の読み込み後になってしまうため、Java.lang.OutOfMemoryErrorが発生してしまう。
このため、

a = a0;
a = null;
a = a1; // ok

として、a1の読み込み前にGCを働かせるようにしてやる必要がある。とくに、特定クラスがもつ内部変数の場合、複数のメソッドにまたがる処理やメソッドの再呼び出しなども絡むため要注意。

参照:
http://www.intra-mart.jp/download/doc/OutOfMemoryError.html

タグ: ,