JVM은 실행 중인 Java 애플리케이션의 메모리를 아래와 같이 구분해 관리함:
Heap 영역: 객체가 저장되는 공간 (GC의 주요 대상)
Method Area (PermGen / Metaspace): 클래스 정보, 메서드 정보
Stack: 각 쓰레드마다 생성되는 프레임 기반 메모리 (지역 변수 저장)
PC Register, Native Stack 등: 기타 JVM 내부 운영용
| 구분 | 트리거 조건 | 대상 영역 | 특징 |
|---|---|---|---|
| Minor GC | Eden 가득 참 | Young Gen (Eden + Survivor) | 빠르고 자주 발생함 |
| Major GC | Old 영역 가득 참 | Old Gen | 느리고 STW 발생 가능성 높음 |
| Full GC | 전체 Heap 점검 필요 시 | 전체 Heap (Young + Old) | 성능에 가장 큰 영향 |
[Eden] → [Survivor S0] → [Survivor S1] → [Old]
(갓 생성됨) (1번 생존) (2~3번 생존) (오래 살아남음)
“JVM은 새로 생성된 객체를 Eden에 저장하고, GC에서 살아남으면 Survivor → Old 순으로 이동시킵니다.
객체 생존 시간에 따라 영역을 분리해서, GC 비용을 최소화하려는 구조입니다.”
“Minor GC는 Eden이 가득 찼을 때 발생하고 빠르며, Major GC는 Old 영역이 가득 찰 때 발생해 상대적으로 느리고 Stop-The-World를 유발할 수 있습니다.”