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

Apakah situasi yang boleh menyebabkan limpahan memori Java?

WBOY
Lepaskan: 2023-05-09 16:19:23
ke hadapan
1467 orang telah melayarinya

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)*/
Salin selepas log masuk

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)*/
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan