Java

JVM GC 방식

나쁜천사1004 2024. 5. 27. 17:22

JVM의 GC(가비지 컬렉션) 방식을 선택할 때는 애플리케이션의 특성, 요구 성능, 메모리 사용량, 지연 시간(Latency) 허용 범위 등을 고려해야 합니다. 아래에 다양한 JVM GC 방식과 각 방식이 적합한 애플리케이션 유형을 설명합니다.

1. Serial GC

  • 특징: 단일 스레드를 사용하여 가비지 컬렉션을 수행합니다.
  • 장점: 구현이 간단하고, 낮은 오버헤드.
  • 단점: 멀티코어 시스템에서 효율이 낮음, Stop-the-World 시간이 길 수 있음.
  • 추천 사용 시나리오:
    • 작은 힙 크기
    • 단일 스레드 애플리케이션
    • 임베디드 시스템 또는 리소스가 제한된 환경
  • 사용 옵션: -XX:+UseSerialGC

2. Parallel GC (Throughput GC)

  • 특징: 여러 스레드를 사용하여 병렬로 가비지 컬렉션을 수행합니다.
  • 장점: 처리량이 높으며, GC 시간 단축.
  • 단점: Stop-the-World 시간이 여전히 길 수 있음.
  • 추천 사용 시나리오:
    • 멀티코어 시스템
    • 배치 처리 또는 백엔드 서버와 같이 높은 처리량이 중요한 애플리케이션
    • 큰 힙 크기
  • 사용 옵션: -XX:+UseParallelGC

3. G1 (Garbage-First) GC

  • 특징: 힙을 여러 영역으로 나누어 각 영역을 독립적으로 가비지 컬렉션합니다. 먼저 가비지가 많은 영역을 우선적으로 처리.
  • 장점: 일관된 GC 시간을 제공하며, 큰 힙에서도 효율적.
  • 단점: 튜닝이 필요할 수 있음, 초기 설정 복잡도.
  • 추천 사용 시나리오:
    • 중간 크기에서 큰 크기의 힙
    • 일관된 응답 시간이 중요한 애플리케이션
    • Java 9 이상에서는 기본 GC
  • 사용 옵션: -XX:+UseG1GC

4. ZGC (Z Garbage Collector)

  • 특징: 매우 큰 힙을 지원하며, 대부분의 GC 작업을 동시(Concurrent)로 수행하여 매우 짧은 Stop-the-World 시간을 제공.
  • 장점: 낮은 레이턴시, 큰 힙 지원.
  • 단점: 최신 JVM 버전에서만 지원, 일부 오버헤드.
  • 추천 사용 시나리오:
    • 대규모 힙 (수 테라바이트)
    • 매우 낮은 레이턴시가 중요한 애플리케이션
  • 사용 옵션: -XX:+UseZGC

5. Shenandoah GC

  • 특징: 애플리케이션 스레드와 가비지 컬렉션 스레드가 거의 동시에 동작하여 Stop-the-World 시간을 최소화.
  • 장점: 일관된 낮은 레이턴시, 큰 힙에서 효율적.
  • 단점: 일부 오버헤드, 최신 JVM 버전에서만 지원.
  • 추천 사용 시나리오:
    • 대규모 힙
    • 일관된 낮은 레이턴시가 중요한 애플리케이션
  • 사용 옵션: -XX:+UseShenandoahGC

GC 방식 선택 요약

  1. 작은 힙과 단일 스레드 애플리케이션: Serial GC.
  2. 높은 처리량이 중요한 멀티코어 시스템: Parallel GC.
  3. 일관된 응답 시간과 큰 힙: G1 GC.
  4. 매우 낮은 레이턴시와 대규모 힙: ZGC.
  5. 일관된 낮은 레이턴시와 대규모 힙: Shenandoah GC.

애플리케이션의 특성에 맞춰 GC 방식을 선택하고, 필요시 추가적인 튜닝을 통해 최적의 성능을 달성할 수 있습니다.

반응형

'Java' 카테고리의 다른 글

ROCKY(CENTOS) openjdk 17 yum 사용 없이 설치  (1) 2024.11.06
Java thread dump+core dump 생성 방법  (0) 2024.06.24