Java에서 GC 오버헤드 제한 초과 오류

Suraj P 2023년10월12일
  1. Java의 GC 오버헤드 제한 초과 오류에 대한 간략한 소개
  2. Java에서 GC Overhead Limit Exceeded 오류 해결
  3. 결론
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 오류 해결

여기서 아이디어는 애플리케이션에서 메모리 누수를 막는 것입니다. 우리 프로그램에서 이러한 오류를 피하기 위해 아래 사항을 따르면 주의할 수 있습니다.

  1. 힙에서 메모리 할당이 수행되는 개체의 위치를 식별합니다.
  2. 약하게 참조된 객체와 막대한 양의 임시 객체는 메모리 누수 가능성을 높이므로 피하십시오.
  3. 힙에서 많은 공간을 차지하는 객체를 식별합니다.

결론

이 기사에서는 프로그램이 유용한 작업보다 가비지 수집에 더 많은 시간을 할애할 때 발생하는 GC 오버헤드 제한 초과 오류에 대해 알아보았습니다. 메모리 누수를 방지할 수 있도록 개체에 힙 메모리가 할당된 위치를 잘 확인하여 프로그램에서 이 오류가 발생하지 않도록 함으로써 이를 방지할 수 있음을 이해했습니다.

작가: 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

관련 문장 - Java Error