Java에서 GC 오버헤드 제한 초과 오류
이 기사에서는 Java의 GC 오버헤드 제한 초과
오류에 대해 설명합니다.
Java의 GC 오버헤드 제한 초과 오류에 대한 간략한 소개
Java에서 JVM(Java Virtual Machine)은 프로그램이 더 이상 개체를 사용하지 않을 때 메모리를 해제합니다. 메모리를 해제하는 프로세스를 가비지 컬렉션(GC)이라고 합니다.
GC 오버헤드 제한 초과
오류는 리소스/메모리가 고갈되고 있음을 나타냅니다. 이 오류는 java.lang.OutOfMemoryError
오류 계열에 속합니다.
공식 Java 문서에 따르면 JVM(Java Virtual Machine)은 이 오류를 발생시켜 프로그램이나 애플리케이션이 가치 있는 작업을 수행하는 것보다 가비지 수집에 더 많은 시간을 소비하고 있음을 나타냅니다. 응용 프로그램.
이제 더 잘 이해하기 위해 예를 살펴보겠습니다.
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");
}
}
}
위의 코드에서 map
을 만들고 값을 무한대로 삽입했습니다. 기억해야 할 점은 지도
가 힙 메모리를 사용한다는 것입니다.
그리고 병렬 가비지 컬렉터로 코드를 실행하여 GC 오버헤드 제한 초과 오류
를 얻습니다.
java - Xmx100m - XX : +UseParallelGC test
병렬 가비지 수집기로 위의 코드를 실행하면 java.lang.OutOfMemoryError: GC 오버헤드 제한 초과
메시지가 표시됩니다. 그러나 이는 Java 힙 크기 또는 다른 GC 알고리즘으로 인해 컴퓨터마다 다를 수 있습니다.
Java에서 GC Overhead Limit Exceeded 오류 해결
여기서 아이디어는 애플리케이션에서 메모리 누수를 막는 것입니다. 우리 프로그램에서 이러한 오류를 피하기 위해 아래 사항을 따르면 주의할 수 있습니다.
- 힙에서 메모리 할당이 수행되는 개체의 위치를 식별합니다.
- 약하게 참조된 객체와 막대한 양의 임시 객체는 메모리 누수 가능성을 높이므로 피하십시오.
- 힙에서 많은 공간을 차지하는 객체를 식별합니다.
결론
이 기사에서는 프로그램이 유용한 작업보다 가비지 수집에 더 많은 시간을 할애할 때 발생하는 GC 오버헤드 제한 초과
오류에 대해 알아보았습니다. 메모리 누수를 방지할 수 있도록 개체에 힙 메모리가 할당된 위치를 잘 확인하여 프로그램에서 이 오류가 발생하지 않도록 함으로써 이를 방지할 수 있음을 이해했습니다.