Heim > Java > javaLernprogramm > Welche Situationen können zu einem Java-Speicherüberlauf führen?

Welche Situationen können zu einem Java-Speicherüberlauf führen?

WBOY
Freigeben: 2023-05-09 16:19:23
nach vorne
1468 Leute haben es durchsucht

1. Heap-Überlauf, Der Heap speichert Instanzobjekte, aber früher oder später wird der Heap-Bereich voll sein. Wenn der Heap-Bereichsspeicher festgelegt ist, wird beim Erstellen eine Ausnahme ausgelöst.

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)*/
Nach dem Login kopieren

2. Überlauf des Stapels der virtuellen Maschine und des lokalen Methodenstapels

Wenn die vom Thread benötigte Stapeltiefe größer ist als die zulässige Tiefe Die Sperre der virtuellen Maschine löst dann eine StackOverflowError-Ausnahme aus.

Wenn die virtuelle Maschine beim Erweitern des Stapels nicht genügend Speicherplatz beantragen kann, tritt eine Ausnahme auf.

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)*/
Nach dem Login kopieren

3. Methodenbereich und Laufzeitkonstanten-Pool-Überlauf

4. Nativer direkter Speicherüberlauf #🎜 🎜#

DirectMemory-Kapazität kann durch -XX:MaxDirectMemorySize angegeben werden. Wenn nicht angegeben, ist der Standardwert derselbe wie der Wert des Java-Heaps (angegeben durch -Xmx).

Das obige ist der detaillierte Inhalt vonWelche Situationen können zu einem Java-Speicherüberlauf führen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage