Java

G1 GC 영역 (Eden, Survivor, Old Gen)

마시멜로를찾아서 2025. 5. 14. 11:14
반응형

🧠 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
반응형