Beheben Sie den Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded

Sheeraz Gul 12 Oktober 2023
  1. der Fehler Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded
  2. Beheben Sie den Fehler Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded
Beheben Sie den Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded

Dieses Tutorial demonstriert den Fehler Java.lang.outofmemoryerror: GC-Overhead-Limit überschritten in Java.

der Fehler Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded

Im Gegensatz zu anderen Programmiersprachen verwendet die Java-Laufzeit einen Garbage-Collector-GC-Prozess für die Garbage-Collection. In Java löscht der Garbage Collector den Speicher für sie, wenn ein bestimmter Teil des Speichers nicht verwendet wird.

Der Fehler Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded tritt auf, wenn unser Code oder unsere Anwendung den gesamten Speicher erschöpft hat und GC den Speicher nicht mehr bereinigen kann.

Der Fehler Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded signalisiert, dass die JVM zu lange gebraucht hat, um die Garbage Collection durchzuführen. JVM gibt diesen Fehler aus, wenn die Garbage-Collection 98 % der Zeit in Anspruch nimmt und nur die anderen 2 % des Heaps wiederhergestellt werden können.

Hier ist ein Beispiel, das denselben Fehler auslöst:

package delftstack;

import java.util.*;
public class Example {
  public static void main(String args[]) throws Exception {
    Map DemoMap = System.getProperties();
    Random DemoRandom = new Random();
    while (true) {
      DemoMap.put(DemoRandom.nextInt(), "value");
    }
  }
}

Der obige Code fügt den Zufallswert kontinuierlich in die Karte ein, bis die Garbage Collection 98 % erreicht, und löst den Fehler Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded aus. Der Heap-Speicher wird in den Karten verwendet.

Siehe Ausgabe:

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"

Selbst wenn wir diesen Code mit einem parallelen Garbage Collector ausführen, wird immer noch derselbe Fehler ausgegeben. Siehe das Beispiel über CMD:

java -Xmx100m -XX:+UseParallelGC Example.java

Es wird immer noch der gleiche Fehler ausgegeben. Siehe Ausgabe:

C:\Users\Sheeraz>java -Xmx100m -XX:+UseParallelGC Example1.java
Note: Example1.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
        at java.base/java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1047)
        at java.base/java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006)
        at java.base/java.util.Properties.put(Properties.java:1301)
        at delftstack.Example.main(Example1.java:9)

Beheben Sie den Fehler Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded

Die Lösung für diesen Fehler besteht darin, Speicherlecks zu verhindern. Stellen Sie sicher, dass die folgenden Punkte befolgt werden, damit Sie Speicherlecks verhindern können:

  1. Identifizieren Sie die Stellen, an denen die Speicherzuweisung für den Heap erfolgt.
  2. Es ist die beste Vorgehensweise, das Erstellen einer großen Menge von schwach referenzierten oder temporären Objekten zu vermeiden, da sie meistens der Grund für Speicherverluste sind.
  3. Identifizieren Sie das Objekt, das einen großen Platz auf dem Haufen einnimmt.
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Verwandter Artikel - Java Error