OutOfMemoryError は catch 出来る ― 2009年08月20日 01時06分50秒
簡単な実験プログラムを書いてみる。
% cat OutOfMemoryTest.java
import java.util.*;
public class OutOfMemoryTest
{
public static void main(String[] args)
{
try
{
List l = new LinkedList();
while(true)
l.add(new byte[1024 * 1024]);
}
catch(OutOfMemoryError e)
{
System.err.println("Catched");
e.printStackTrace();
}
}
コンパイルし、実行する。
% javac OutOfMemoryTest.java
% java OutOfMemoryTest
Catched
java.lang.OutOfMemoryError: Java heap space
at OutOfMemoryTest.main(Main.java:10)
OutOfMemoryError を捕捉出来ているのが分かる。
なぜ、前回は駄目だったのかは、画像処理でのメモリ不足を捕捉しようとしていたからだった。画像関連は最終的に sun.awt.image.* のクラスが呼ばれる。このクラスがスレッドを生成して処理を行なっていた為、メモリ不足でエラーが出たときには既に自分の制御下になかったからだった。
最近のコメント