1. ヒープ オーバーフロー、ヒープにはインスタンス オブジェクトが格納されますが、遅かれ早かれヒープ領域はいっぱいになります。ヒープ領域メモリが設定されている場合、作成時に例外がスローされます。
public class HeapOOM { static class User {} public static void main(String[] args) { List<User> list = new ArrayList<User>(); while (true) { list.add(new User()); } } } /*Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded at com.fdd.test.HeapOOM.main(HeapOOM.java:11)*/
2. 仮想マシン スタックとローカル メソッド スタックのオーバーフロー
スレッドが必要とするスタックの深さが、仮想マシンのロックで許可される深さよりも大きい場合、 StackOverflowError 例外がスローされます。
スタックを拡張するときに仮想マシンが十分なストレージ領域を適用できない場合、例外が発生します。
public class StackOutOfMemoryError { public static void main(String[] args) { test(); } private static void go() { System.out.println("StackOverflowError异常"); test(); } } /*Exception in thread "main" java.lang.StackOverflowError at sun.nio.cs.ext.DoubleByte$Encoder.encodeLoop(DoubleByte.java:617) at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579) at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:271) at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125) at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207) at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129) at java.io.PrintStream.write(PrintStream.java:526) at java.io.PrintStream.print(PrintStream.java:597) at java.io.PrintStream.println(PrintStream.java:736) at com.fdd.test.StackOutOfMemoryError.go(StackOutOfMemoryError.java:11) at com.fdd.test.StackOutOfMemoryError.go(StackOutOfMemoryError.java:13)*/
3. メソッド領域とランタイム定数プールのオーバーフロー
4. ネイティブ ダイレクト メモリのオーバーフロー
DirectMemory 容量指定しない場合、デフォルトは Java ヒープの値 (-Xmx で指定) と同じになります。
以上がJava メモリ オーバーフローの 4 つの状況とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。