Language & Framework
GC 알고리즘별 Minor GC와 Survivor 영역의 동작 비교 정리
by Jordy-torvalds
2025. 5. 17.
이 문서는 G1GC의 Minor GC 동작 원리, Survivor 영역의 역할, 그리고 다른 GC 알고리즘에서의 Survivor 처리 방식을 비교하며 정리한 내용입니다. 각 GC 방식의 힙 구조, GC 트리거 조건, STW 여부 등을 상세히 설명하고, 어떤 상황에서 Survivor가 사용되는지를 중심으로 핵심 내용을 요약합니다.
1. G1GC의 Minor GC
힙 구조
- G1GC는 힙을 Region 단위로 나눔
- Young Generation은 여러 개의 Eden + Survivor Region으로 구성됨
Minor GC 트리거
- Eden 영역이 가득 차면 Minor GC 발생
- Survivor가 가득 차는 건 트리거 요인은 아님 (대신 promotion failure 발생 가능)
Minor GC 시 동작
- Eden에 있는 살아있는 객체는 Survivor 또는 Old로 복사
- 기존 Survivor의 객체는 다른 Survivor 또는 Old로 복사
- 이 과정은 Stop-The-World(STW) 구간에서 이루어짐
- 복사 기반의 GC 방식
2. Survivor 영역의 특성
구분 |
설명 |
할당 여부 |
애플리케이션은 직접 할당하지 않음 |
사용 시점 |
Minor GC 중에만 사용됨 |
주요 역할 |
Eden에서 살아남은 객체를 임시로 저장 |
승격 |
객체의 Age가 임계치를 넘으면 Old로 승격 |
GC 트리거와의 관계 |
Eden과 달리 직접적인 트리거는 아님 |
3. 다른 GC 알고리즘과 Survivor
GC 종류 |
세대 구조 |
Survivor 존재 |
Survivor 사용 시점 |
Serial GC |
있음 |
있음 |
Minor GC 중 |
Parallel GC |
있음 |
있음 |
Minor GC 중 |
CMS |
있음 |
있음 |
Minor GC 중 |
G1GC |
있음 (Region 기반) |
있음 |
Minor GC 중 |
ZGC |
없음 |
없음 |
해당 없음 |
Shenandoah |
없음 |
없음 |
해당 없음 |
✅ 세대형(Generational) GC는 모두 Minor GC에서만 Survivor 사용
❌ ZGC, Shenandoah는 세대 구분이 없기 때문에 Survivor 자체가 없음
핵심 요약
- Survivor는 Eden의 일부가 아니며, 단지 Minor GC 중에만 사용되는 중간 캐시 역할의 공간
- Minor GC는 Eden이 가득 찼을 때만 발생, Survivor는 직접적인 트리거 요인이 아님
- 모든 세대형 GC에서 Survivor는 Minor GC 중에만 사용되며,
- ZGC, Shenandoah 같은 최신 GC는 애초에 Survivor 영역 자체가 존재하지 않음