반응형
🧠 G1 GC의 주요 영역 설명
G1 GC는 아래의 세 가지 주요 영역으로 힙 메모리를 구성합니다:
1. 🟦 Eden 영역 (Eden Space)
- 객체가 처음 생성되는 공간
- Young GC 대상이며, 대부분의 객체는 이곳에서 생성되자마자 사라집니다 (short-lived objects)
- 가득 차면 → Young GC 발생
- 살아남은 객체는 Survivor로 이동
2. 🟨 Survivor 영역
- Eden에서 살아남은 객체들이 일시적으로 이동하는 공간
- Survivor 공간도 여러 Region으로 구성됨
- 객체가 특정 횟수(tenuring threshold)만큼 GC에서 살아남으면 → Old 영역으로 이동
3. 🟥 Old 영역 (Tenured / Old Gen)
- 장시간 생존한 객체들이 위치하는 공간
- Young GC로는 수거되지 않으며, 공간이 가득 차면 Old GC (Mixed GC 또는 Full GC) 가 발생
- Old Gen이 커지면 GC 멈춤 시간이 길어질 수 있음
📊 시각화 예시
+---------------------------+
| Heap |
+---------------------------+
| Eden | Survivor | Old |
| | (S0/S1) | |
+---------------------------+
- Eden: 객체 생성 직후
- Survivor: 살아남은 객체 저장, 두 공간이 번갈아 사용됨 (S0/S1)
- Old: 오래된 객체, Full GC 또는 Mixed GC로 정리됨
🔄 G1 GC의 동작 흐름
1. 객체 생성 → Eden
2. GC 발생 시 Eden → Survivor 이동
3. Survivor에서 살아남으면 → Old 영역으로 이동
4. Old 영역 가득 차면 → Mixed GC (Young + Old) 또는 Full GC
🧪 G1 GC의 장점
특징설명
Region 기반 분할 | 힙을 고정 크기 Region으로 나눔 (기본 1~32MB) |
Predictable Pause | -XX:MaxGCPauseMillis로 멈춤 시간 목표 설정 가능 |
Mixed GC 지원 | Old + Young 객체를 동시에 수집하여 효율적 |
멀티코어 최적화 | 병렬 GC, 병렬 압축 등 성능 최적화 가능 |
🔧 JVM 옵션 예시
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:G1HeapRegionSize=8m \
-XX:InitiatingHeapOccupancyPercent=45
📘 요약
영역주요 역할관련 JVM 옵션 예시
Eden | 객체 최초 생성, Young GC 대상 | 자동 설정 (크기 조정 가능) |
Survivor | Eden에서 살아남은 객체 임시 보관 | -XX:SurvivorRatio=8 |
Old | 장수 객체 저장, Full 또는 Mixed GC 대상 | -XX:InitiatingHeapOccupancyPercent=45 |
반응형
'Java' 카테고리의 다른 글
G1 GC 관리 항목별 Default 값 및 권장 설정 (1) | 2025.05.14 |
---|---|
트랜잭션이 적용되지 않고 AutoCommit 상태일 때 발생할 수 있는 문제점 (0) | 2025.05.14 |
@Transactional 어디에 위치시켜야하나? (0) | 2025.05.14 |
gRPC 연동 정리 (Java vs Kotlin vs NestJS) (0) | 2025.04.02 |
Java, Kotlin, NestJS의 CI/CD 구성과 마이크로서비스 아키텍처 구성 차이 (0) | 2025.04.02 |