OutOfMemoryError発生時のエラーメッセージの変遷
なぜか唐突に(謎)。わざわざ準備するのは面倒なので、手元にあるものだけ確認。
まず、OutOfMemoryErrorを引き起こすためのコード。
import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.LinkedList; import java.util.List; public class Main { // 長さ 60 の文字列を生成するためのformatter private static NumberFormat nf = new DecimalFormat("000000000000000000000000000000000000000000000000000000000000"); public static void main(String[] args) { System.err.println(System.getProperty("java.version")); List list = new LinkedList(); long n = 0; for (;true; ++n) { String s = nf.format(n); list.add(s); } } }
SunのJ2SDK 1.4.2_18。
1.4.2_18 java.lang.OutOfMemoryError Exception in thread "main"
SunのJDK 5.0 Update 11。
1.5.0_11 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
SunのJDK 6 Update 1。
1.6.0_01 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2882) at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:572) at java.lang.StringBuffer.append(StringBuffer.java:320) at java.text.DecimalFormat.subformat(DecimalFormat.java:1060) at java.text.DecimalFormat.format(DecimalFormat.java:674) at java.text.DecimalFormat.format(DecimalFormat.java:608) at java.text.NumberFormat.format(NumberFormat.java:280) at Main.main(Main.java:25)
IBMのJDK 5.0 (DB2 Express-C v9.1.2 に同梱されているもの)。
1.5.0 JVMDUMP006I Processing Dump Event "uncaught", detail "java/lang/OutOfMemoryError" - Please Wait. JVMDUMP007I JVM Requesting Snap Dump using 'c:\work\Snap0001.20090827.220209.8712.trc' JVMDUMP010I Snap Dump written to c:\work\Snap0001.20090827.220209.8712.trc JVMDUMP007I JVM Requesting Heap Dump using 'c:\work\heapdump.20090827.220209.8712.phd' JVMDUMP010I Heap Dump written to c:\work\heapdump.20090827.220209.8712.phd JVMDUMP007I JVM Requesting Java Dump using 'c:\work\javacore.20090827.220209.8712.txt' JVMDUMP012E Error in Java Dump: c:\work\javacore.20090827.220209.8712.txt JVMDUMP013I Processed Dump Event "uncaught", detail "java/lang/OutOfMemoryError". Exception in thread "main" java.lang.OutOfMemoryError at java.lang.StringBuffer.ensureCapacityImpl(StringBuffer.java:398) at java.lang.StringBuffer.append(StringBuffer.java:154) at java.text.DecimalFormat.subformat(DecimalFormat.java:1050) at java.text.DecimalFormat.format(DecimalFormat.java:677) at java.text.DecimalFormat.format(DecimalFormat.java:612) at java.text.NumberFormat.format(NumberFormat.java:274) at Main.main(Main.java:25)
IBMのJDK 5.0 (DB2 Express-C v9.5.2 に同梱されているもの)。
1.5.0 JVMDUMP006I Processing Dump Event "systhrow", detail "java/lang/OutOfMemoryError" - Please Wait. JVMDUMP007I JVM Requesting Snap Dump using 'c:\work\Snap0001.20090827.132355.1576.trc' JVMDUMP010I Snap Dump written to c:\work\Snap0001.20090827.132355.1576.trc JVMDUMP007I JVM Requesting Heap Dump using 'c:\work\heapdump.20090827.132355.1576.phd' JVMDUMP010I Heap Dump written to c:\work\heapdump.20090827.132355.1576.phd JVMDUMP007I JVM Requesting Java Dump using 'c:\work\javacore.20090827.132355.1576.txt' JVMDUMP010I Java Dump written to c:\work\javacore.20090827.132355.1576.txt JVMDUMP013I Processed Dump Event "systhrow", detail "java/lang/OutOfMemoryError". Exception in thread "main" java.lang.OutOfMemoryError at java.util.LinkedList.addBefore(LinkedList.java:649) at java.util.LinkedList.add(LinkedList.java:211) at Main.main(Main.java:26)
IBMのJDK 6 (DB2 Express-C v9.7.0 に同梱されているもの)。
1.6.0 JVMDUMP006I ダンプ・イベント "systhrow"、詳細 "java/lang/OutOfMemoryError" を処理しています - お待ちください。 JVMDUMP007I JVM は Snap ダンプ ('c:\work\Snap.20090827.222915.9628.0001.trc' を使用する) を要求しています JVMDUMP010I Snap ダンプは c:\work\Snap.20090827.222915.9628.0001.trc に書き込まれました JVMDUMP007I JVM は Heap ダンプ ('c:\work\heapdump.20090827.222915.9628.0002.phd' を使用する) を要求しています JVMDUMP010I Heap ダンプは c:\work\heapdump.20090827.222915.9628.0002.phd に書き込まれました JVMDUMP007I JVM は Java ダンプ ('c:\work\javacore.20090827.222915.9628.0003.txt' を使用する) を要求しています JVMDUMP010I Java ダンプは c:\work\javacore.20090827.222915.9628.0003.txt に書き込まれました JVMDUMP013I ダンプ・イベント "systhrow"、詳細 "java/lang/OutOfMemoryError" を処理しました。 Exception in thread "main" java.lang.OutOfMemoryError at java.lang.StringBuffer.ensureCapacityImpl(StringBuffer.java:335) at java.lang.StringBuffer.append(StringBuffer.java:128) at java.text.DecimalFormat.subformat(DecimalFormat.java:877) at java.text.DecimalFormat.format(DecimalFormat.java:685) at java.text.DecimalFormat.format(DecimalFormat.java:619) at java.text.NumberFormat.format(NumberFormat.java:291) at Main.main(Main.java:25)