[Java] GC 변천사

devdo·2026년 6월 21일

Java

목록 보기
63/63
post-thumbnail

자바의 GC(Garbage Collection) 는 JVM 성능과 메모리 관리의 핵심 요소라서, 시대별로 큰 변화를 겪어왔습니다. 흐름을 정리하겠습니다.


🕰️ 자바 GC 변천사

1. Serial GC (초기, JDK 1.2~)

  • 단일 스레드 기반 → 작은 애플리케이션에 적합
  • Stop-The-World 시간이 길어 대규모 서비스에는 부적합
  • 구조: Young/Old 세대 분리, Mark-Sweep-Compact 방식

2. Parallel GC (JDK 1.4~)

  • 멀티코어 활용 → Young/Old 세대 수집을 병렬화
  • Throughput Collector 라고도 불림
  • 대규모 서버 환경에서 기본 선택지로 자리잡음

3. CMS (Concurrent Mark-Sweep, JDK 1.5~)

  • Stop-The-World 시간을 줄이기 위해 동시 마킹/스위핑 도입
  • 응답 지연(latency)에 민감한 서비스에 적합
  • 단점: Fragmentation 발생, Full GC 비용 큼
  • JDK 9 이후 Deprecated → JDK 14에서 완전 제거

4. G1 GC (Garbage First, JDK 7~)

  • Region 기반 메모리 관리 (Heap을 여러 Region으로 나눔)
  • Predictable Pause Time 목표 → 짧고 일정한 GC 지연 제공
  • CMS 대체로 자리잡음, JDK 9 이후 기본 GC

5. ZGC (JDK 11~)

  • 초저지연 GC (Pause Time < 10ms 목표)
  • 수십 GB~TB 규모 Heap에서도 안정적
  • Colored Pointer, Load Barrier 기법 사용
  • JDK 15부터 Linux/Windows/macOS 지원

6. Shenandoah GC (JDK 12~)

  • Red Hat 주도 개발
  • Concurrent Compaction → GC 중에도 객체 이동 가능
  • Pause Time 최소화, 대규모 메모리 환경에 적합

📊 요약 비교

GC특징장점단점
Serial단일 스레드단순, 소규모 적합대규모 환경 부적합
Parallel멀티스레드Throughput ↑Pause Time 길음
CMSConcurrent Mark-SweepPause Time ↓Fragmentation, Deprecated
G1Region 기반예측 가능한 Pause튜닝 복잡
ZGC초저지연TB급 Heap 지원최신 JVM 필요
ShenandoahConcurrent CompactionPause 최소화상대적 성능 오버헤드

👉 결론적으로, 과거에는 Throughput 중심(Parallel, CMS) 이었지만, 최근에는 저지연 중심(G1, ZGC, Shenandoah) 으로 발전했습니다. 특히 ZGC와 Shenandoah는 대용량 AI 시스템이나 실시간 서비스에서 가장 많이 쓰이는 최신 GC입니다.

profile
자바 스프링 백엔드 개발자입니다. 배운 것을 기록합니다.

0개의 댓글