HOWTO · Java
Java.Lang.OutOfMemoryError 해결: GC 오버헤드 제한 초과
이 자습서에서는 Java의 java.lang.outofmemoryerror: gc overhead limit exceeded 오류를 보여줍니다.
이 페이지의 내용
이 튜토리얼은 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 오류 해결
이 오류에 대한 해결책은 메모리 누수를 방지하는 것입니다. 메모리 누수를 방지할 수 있도록 아래 사항을 준수하십시오.
- 힙에 대한 메모리 할당이 수행되는 위치를 식별합니다.
- 약하게 참조된 또는 임시 객체를 대량으로 생성하지 않는 것이 가장 좋은 방법입니다. 대부분 메모리 누수의 원인이 되기 때문입니다.
- 힙에서 큰 공간을 차지하는 객체를 식별합니다.