GC-Overhead-Limit überschritten Fehler in Java

Suraj P 12 Oktober 2023
  1. Kurze Einführung in den GC Overhead Limit Exceeded Error in Java
  2. Beheben Sie den Fehler GC Overhead Limit Exceeded in Java
  3. Abschluss
GC-Overhead-Limit überschritten Fehler in Java

In diesem Artikel wird der Fehler GC-Overhead-Limit überschritten in Java behandelt.

Kurze Einführung in den GC Overhead Limit Exceeded Error in Java

In Java gibt JVM (Java Virtual Machine) den Speicher frei, wenn das Programm die Objekte nicht mehr verwendet. Der Vorgang des Freigebens von Speicher wird Garbage Collection (GC) genannt.

Der Fehler GC-Overhead-Limit überschritten zeigt an, dass Ressourcen/Speicher erschöpft sind. Dieser Fehler fällt unter die Fehlerfamilie java.lang.OutOfMemoryError.

Gemäß der offiziellen Java-Dokumentation gibt JVM (Java Virtual Machine) diesen Fehler aus, um anzuzeigen, dass das Programm oder die Anwendung mehr Zeit mit der Garbage Collection verbringt als mit wertvoller Arbeit, d. h. wenn 98 % der Zeit mit der Garbage Collection verbracht wird die Anwendung.

Sehen wir uns nun ein Beispiel an, um es besser zu verstehen.

import java.util.*;
public class test {
  public static void main(String args[]) throws Exception {
    Map<Integer, String> map = new HashMap<>();
    Random rnd = new Random();
    while (true) {
      map.put(rnd.nextInt(), "val");
    }
    catch (Exception e) {
      System.out.println("ye");
    }
  }
}

Wir haben im obigen Code eine Karte erstellt und Werte unendlich eingefügt. Ein zu beachtender Punkt ist, dass maps Heap-Speicher verwenden.

Und wir führen den Code mit einem parallelen Garbage Collector aus, um den Fehler GC-Overhead-Limit überschritten zu erhalten.

java - Xmx100m - XX : +UseParallelGC test

Wenn der obige Code mit dem parallelen Garbage Collector ausgeführt wird, erhalten wir die Meldung java.lang.OutOfMemoryError: GC-Overhead-Limit überschritten. Dies kann sich jedoch von Computer zu Computer aufgrund der Java-Heap-Größe oder eines anderen GC-Algorithmus unterscheiden.

Beheben Sie den Fehler GC Overhead Limit Exceeded in Java

Die Idee hier ist, Speicherlecks in unserer Anwendung zu stoppen. Wir können vorsichtig sein, indem wir die folgenden Punkte befolgen, um diesen Fehler in unserem Programm zu vermeiden.

  1. Identifizieren Sie die Position von Objekten, an denen die Speicherzuweisung in einem Heap erfolgt.
  2. Vermeiden Sie schwach referenzierte Objekte und die große Menge an temporären Objekten, da sie die Wahrscheinlichkeit von Speicherlecks erhöhen.
  3. Identifizieren Sie die Objekte, die auf einem Haufen viel Platz einnehmen.

Abschluss

In diesem Artikel haben wir von dem Fehler GC Overhead Limit überschritten erfahren, der auftritt, wenn ein Programm mehr Zeit mit der Garbage Collection verbringt als mit einer nützlichen Aufgabe. Wir haben verstanden, dass dies verhindert werden kann, indem die Positionen, an denen Heap-Speicher Objekten zugewiesen wird, gut überprüft werden, sodass Speicherlecks vermieden werden können, wodurch verhindert wird, dass das Programm diesen Fehler erhält.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Verwandter Artikel - Java Error