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 방식 선택 요약
- 작은 힙과 단일 스레드 애플리케이션: Serial GC.
- 높은 처리량이 중요한 멀티코어 시스템: Parallel GC.
- 일관된 응답 시간과 큰 힙: G1 GC.
- 매우 낮은 레이턴시와 대규모 힙: ZGC.
- 일관된 낮은 레이턴시와 대규모 힙: Shenandoah GC.
애플리케이션의 특성에 맞춰 GC 방식을 선택하고, 필요시 추가적인 튜닝을 통해 최적의 성능을 달성할 수 있습니다.
반응형
'Java' 카테고리의 다른 글
ROCKY(CENTOS) openjdk 17 yum 사용 없이 설치 (1) | 2024.11.06 |
---|---|
Java thread dump+core dump 생성 방법 (0) | 2024.06.24 |