목차
초기 GC들 (JDK 1.0~1.4)
Serial GC
- 가장 오래된 GC
- 단일 스레드로 동작
- 작은 애플리케이션이나 클라이언트 환경에 적합
- Stop-the-World 시간이 길어서 현재는 제한적으로 사용
Parallel GC (Throughput Collector)
- JDK 1.4에서 도입
- 멀티코어 환경에서 여러 스레드를 사용해 처리량을 개선
- JDK 6~8에서 기본 GC
- 여전히 긴 정지 시간이 단점
저지연 목표 GC들 (JDK 1.4~)
Concurrent Mark Sweep (CMS) GC
- JDK 1.4에서 실험적으로 도입
- JDK 6에서 정식 출시
- 애플리케이션과 동시에 실행되어 정지 시간을 줄임
- 메모리 단편화와 CPU 오버헤드 문제로 JDK 14에서 제거
현대적 GC들 (JDK 7~)
G1 GC (Garbage First)
- JDK 7에서 도입
- JDK 9부터 기본 GC
- 힙을 여러 region으로 나누어 관리
- 예측 가능한 정지 시간을 제공
- 대용량 힙(6GB 이상)에서 특히 효과적
최신 저지연 GC들 (JDK 11~)
ZGC (Z Garbage Collector)
- JDK 11에서 실험적으로 도입
- 힙 크기에 관계없이 10ms 미만의 매우 짧은 정지 시간을 목표
- 대용량 메모리 환경에 최적화
Shenandoah GC
- Red Hat에서 개발
- JDK 12에서 실험적으로 포함
- ZGC와 유사하게 저지연을 목표
- 상대적으로 작은 힙에서도 효과적
최신 개발 (JDK 15~)
Epsilon GC
- JDK 11에서 도입된 “no-op” GC
- 실제로는 메모리를 회수하지 않음
- 성능 테스트나 매우 짧은 실행 시간의 애플리케이션용으로 설계