Rumah  >  Artikel  >  Java  >  Apakah situasi yang boleh menyebabkan limpahan memori Java?

Apakah situasi yang boleh menyebabkan limpahan memori Java?

WBOY
WBOYke hadapan
2023-05-09 16:19:231415semak imbas

1. Limpahan timbunan, Timbunan menyimpan objek instance, tetapi lambat laun kawasan timbunan akan penuh. Jika ingatan kawasan timbunan ditetapkan, pengecualian akan dilemparkan apabila dibuat.

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. Tindanan mesin maya dan limpahan tindanan kaedah setempat

Jika kedalaman tindanan yang diperlukan oleh benang lebih besar daripada kedalaman yang dibenarkan oleh kunci mesin maya, a Pengecualian StackOverflowError dilemparkan.

Jika mesin maya tidak dapat memohon ruang storan yang mencukupi semasa mengembangkan tindanan, pengecualian akan berlaku.

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. Kawasan kaedah dan limpahan kolam malar masa jalan

4 Limpahan memori langsung asli

Kapasiti DirectMemory Ia boleh. ditentukan oleh -XX:MaxDirectMemorySize Jika tidak dinyatakan, lalai adalah sama dengan nilai timbunan Java (dinyatakan oleh -Xmx).

Atas ialah kandungan terperinci Apakah situasi yang boleh menyebabkan limpahan memori Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam