Java 애플리케이션을 운영하다 보면 메모리 관리는 피할 수 없는 주제다.
그 중심에 있는 것이 바로 Garbage Collection(GC).
GC는 더 이상 참조되지 않는 객체를 자동으로 해제하는데, 어떤 알고리즘을 쓰느냐에 따라 성능과 안정성이 크게 달라진다.
1. GC 종류
GC 알고리즘 설명 특징
| Serial GC | 단일 스레드 기반 GC | 작은 메모리, 단일 CPU 환경 적합 |
| Parallel GC | Young GC를 멀티스레드로 수행 | Throughput 중심, 멀티코어 환경 적합 |
| CMS (Concurrent Mark-Sweep) | Old 영역을 병행 수집 | Stop-the-world 최소화, 응답 시간 개선 |
| G1 (Garbage First) | Heap을 Region 단위로 관리 | 예측 가능한 GC 시간, 대규모 Heap에 적합 |
| ZGC / Shenandoah | 초저지연 GC | 수십 GB~TB 메모리에서도 수 밀리초 지연 보장 |
2. JVM GC 옵션
옵션 의미 기본 적용 버전
| -XX:+UseSerialGC | Serial GC 사용 | JDK 8 이하 (소형 Heap) |
| -XX:+UseParallelGC | Parallel GC 사용 | JDK 8 기본 |
| -XX:+UseConcMarkSweepGC | CMS 사용 | JDK 9 이전 |
| -XX:+UseG1GC | G1 사용 | JDK 9 이후 기본 |
| -XX:+UseZGC | ZGC 사용 | JDK 11+ (실험적), JDK 15 이후 안정화 |
| -XX:+UseShenandoahGC | Shenandoah 사용 | RedHat OpenJDK 계열 |
3. 실행 시 옵션 예시
# Parallel GC 사용
java -XX:+UseParallelGC -Xms512m -Xmx1024m MyApp
# G1GC 사용
java -XX:+UseG1GC -Xms2g -Xmx2g MyApp
# ZGC 사용
java -XX:+UseZGC -Xmx16g MyApp
4. GC 선택 기준
상황 적합한 GC
| 단일 CPU, 작은 Heap | Serial |
| CPU 코어 많고 Throughput 중요 | Parallel |
| Stop-the-world 최소화 필요 | CMS |
| 대규모 Heap (수 GB 이상), 예측 가능한 수집 시간 | G1 |
| 초저지연, 초대용량 메모리 (수십 GB~TB) | ZGC / Shenandoah |
정리
- GC는 JVM의 핵심 메모리 관리 메커니즘이다.
- Java 버전에 따라 기본 GC가 다르다. (JDK 8 → Parallel, JDK 9 이후 → G1)
- 상황에 맞는 GC를 선택하는 것이 성능 최적화의 핵심이다.