Java.Lang.OutOfMemoryError 해결: GC 오버헤드 제한 초과

Sheeraz Gul 2023년10월12일
  1. Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded 오류
  2. Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded 오류 해결
Java.Lang.OutOfMemoryError 해결: GC 오버헤드 제한 초과

이 튜토리얼은 Java에서 발생하는 Java.lang.outofmemoryerror: GC overhead limit exceeded 오류를 설명합니다.

Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded 오류

다른 프로그래밍 언어와 달리 Java 런타임은 가비지 수집을 위해 가비지 수집기 GC 프로세스를 사용합니다. Java에서 가비지 수집기는 메모리의 특정 부분이 사용되지 않을 때마다 메모리를 지웁니다.

Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded 오류는 코드 또는 애플리케이션이 모든 메모리를 소진하고 GC가 더 이상 메모리를 정리할 수 없을 때 발생합니다.

Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded 오류는 JVM이 가비지 수집을 수행하는 데 너무 오래 걸렸음을 나타냅니다. JVM은 가비지 수집을 수행하는 데 98%의 시간이 걸리고 힙의 나머지 2%만 복구할 수 있을 때 이 오류를 발생시킵니다.

다음은 동일한 오류가 발생하는 예입니다.

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

위의 코드는 가비지 수집이 98%에 도달할 때까지 계속해서 임의의 값을 맵에 배치하고 Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded를 발생시킵니다. 힙 메모리는 맵에서 사용됩니다.

출력 참조:

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

병렬 가비지 수집기를 사용하여 이 코드를 실행하더라도 여전히 동일한 오류가 발생합니다. CMD를 통해 예제를 참조하십시오.

java -Xmx100m -XX:+UseParallelGC Example.java

여전히 같은 오류가 발생합니다. 출력 참조:

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)

Java.Lang.OutOfMemoryError: GC Overhead Limit Exceeded 오류 해결

이 오류에 대한 해결책은 메모리 누수를 방지하는 것입니다. 메모리 누수를 방지할 수 있도록 아래 사항을 준수하십시오.

  1. 힙에 대한 메모리 할당이 수행되는 위치를 식별합니다.
  2. 약하게 참조된 또는 임시 객체를 대량으로 생성하지 않는 것이 가장 좋은 방법입니다. 대부분 메모리 누수의 원인이 되기 때문입니다.
  3. 힙에서 큰 공간을 차지하는 객체를 식별합니다.
작가: Sheeraz Gul
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

관련 문장 - Java Error