Java Garbage Collector 비교
— 이강우 2024/12/05 04:38
GC 종류와 장단점
GC 종류 | 설명 | 장점 | 단점 |
---|---|---|---|
Serial GC | 단일 스레드로 동작하는 GC. 작은 힙 메모리에서 유용. | 단순한 구현, 적은 메모리 사용. | 큰 힙에서 지연 시간이 길어짐. |
Parallel GC | 병렬로 처리하는 GC. Throughput 중심. | 다수의 스레드를 활용해 처리량 극대화. | 지연 시간이 길어질 수 있음. |
CMS (Concurrent Mark-Sweep) | Old 영역을 처리할 때 멀티스레드로 병렬 처리. | GC 지연 시간이 짧음. | 메모리 단편화 문제. stop-the-world 이벤트 발생 가능. |
G1 (Garbage First) | 힙을 Region 단위로 나눠 GC를 실행. 지연 시간과 처리량의 균형을 중시. | 지연 시간 단축 및 큰 힙에 적합. | 구성 및 튜닝 복잡. 초기 오버헤드 있음. |
ZGC (Z Garbage Collector) | 초저지연 GC. 매우 큰 힙(테라바이트 규모)에서 유용. | 지연 시간이 짧고 큰 힙에 적합. | 초기 버전에서는 일부 플랫폼에서만 사용 가능. |
Shenandoah GC | 초저지연 GC. 힙 메모리 크기와 관계없이 낮은 지연 시간 제공. | 지연 시간 짧음. G1보다 빠른 수집 가능. | CPU 사용량이 상대적으로 높음. |
Epsilon GC | “No-Op” GC. 메모리를 수집하지 않음. | 매우 낮은 오버헤드. 테스트 용도에 적합. | 메모리 부족 발생 시 OutOfMemoryError를 유발. |
Generational ZGC | ZGC의 세대 구분 버전(자바 21 도입). | ZGC의 장점과 함께 세대 구분에 의한 최적화. | 새로운 기술로서 튜닝 경험이 적음. |
JDK 버전별 기본 GC
자바 버전 | 기본 GC |
---|---|
자바 8 | Parallel GC |
자바 9~10 | G1 GC (기본 GC로 변경됨). |
자바 11 | G1 GC |
자바 12~15 | G1 GC, 하지만 새로운 GC(ZGC, Shenandoah)도 옵션으로 사용 가능. |
자바 16~17 | G1 GC, ZGC 및 Shenandoah 성능 개선. |
자바 18~20 | G1 GC, Generational GC를 실험적으로 도입. |
자바 21 | Generational ZGC (기본 GC로 변경되지는 않았지만, 성능 최적화를 위해 도입됨). |
참조
JDK 8
을 포함한 대부분의 모든 버전에서 기본적으로 “G1
” 방식을 권장하며 21 이후
버전부터 점진적으로 ZGC
로 변경될것으로 예상됨.
로그인하면 댓글을 남길 수 있습니다.