Resuelva Java.Lang.OutOfMemoryError: Límite de gastos generales de GC excedido

Sheeraz Gul 12 octubre 2023
  1. el error Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded Error
  2. Resuelva el error Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded Error
Resuelva Java.Lang.OutOfMemoryError: Límite de gastos generales de GC excedido

Este tutorial demuestra el error Java.lang.outofmemoryerror: GC overhead limit exceeded en Java.

el error Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded Error

A diferencia de otros lenguajes de programación, el tiempo de ejecución de Java utiliza un proceso GC de recolección de elementos no utilizados para la recolección de elementos no utilizados. En Java, el recolector de basura borrará la memoria cada vez que no se use una parte particular de la memoria.

El error Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded ocurre cuando nuestro código o aplicación agota toda la memoria y GC ya no puede limpiar la memoria.

El error Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded indica que la JVM ha tardado demasiado en realizar la recolección de elementos no utilizados. JVM generará este error cuando se tarde el 98 % del tiempo en realizar la recolección de elementos no utilizados y solo se pueda recuperar el otro 2 % del almacenamiento dinámico.

Aquí hay un ejemplo que arroja el mismo error:

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");
    }
  }
}

El código anterior colocará continuamente el valor aleatorio en el mapa hasta que la recolección de elementos no utilizados alcance el 98 %, y arrojará el mensaje Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded. La memoria del montón se utiliza en los mapas.

Ver salida:

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

Incluso si ejecutamos este código usando un recolector de basura paralelo, seguirá arrojando el mismo error. Ver el ejemplo a través de CMD:

java -Xmx100m -XX:+UseParallelGC Example.java

Seguirá arrojando el mismo error. Ver salida:

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)

Resuelva el error Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded Error

La solución a este error es evitar pérdidas de memoria. Asegúrese de seguir los puntos a continuación para evitar pérdidas de memoria:

  1. Identifique los lugares donde se realiza la asignación de memoria para el montón.
  2. La mejor práctica es evitar la creación de una gran cantidad de objetos débilmente referenciados o temporales porque, en su mayoría, son la causa de la fuga de memoria.
  3. Identifique el objeto que ocupa un espacio grande en el montón.
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

Artículo relacionado - Java Error