[Java] - 가비지 컬렉션 히스토리

목차

초기 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
  • 실제로는 메모리를 회수하지 않음
  • 성능 테스트나 매우 짧은 실행 시간의 애플리케이션용으로 설계
Share