Heim > Java > javaLernprogramm > Was sind die vier Situationen eines Java-Speicherüberlaufs?

Was sind die vier Situationen eines Java-Speicherüberlaufs?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2023-04-30 16:55:13
nach vorne
1230 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 vonWas sind die vier Situationen eines Java-Speicherüberlaufs?. 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
Aktuelle Ausgaben
Kann Java als Backend des Webs verwendet werden?
Aus 1970-01-01 08:00:00
0
0
0
Installieren Sie JAVA
Aus 1970-01-01 08:00:00
0
0
0
Java kann nicht installiert werden
Aus 1970-01-01 08:00:00
0
0
0
Ist das in der Java-Sprache?
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage