각 메모리 영역은 JVM 내에서 서로 다른 목적을 가지고 있으며, 성능 테스트에서 어떤 메트릭에 주목해야 하는지에 대한 기준도 다릅니다. 아래에 각 영역의 정의와 함께 성능 모니터링 시 관찰 포인트를 정리합니다.
🔹 1. G1 Eden Space (Heap 영역)
- 정의: 새로 생성된 객체들이 가장 먼저 저장되는 공간 (Young Generation)
- 특징:
- 객체가 대부분 이곳에서 생성됨
- 살아남은 객체는 Survivor → Old로 이동
- GC가 가장 자주 발생하는 영역 (Minor GC)
- 성능 테스트 주목 포인트:
- 급격한 사용량 증가 → 급락 반복이 정상 (GC 정상 동작)
- GC 빈도와 사용량 피크치 → 너무 잦으면 GC 오버헤드 우려
- Eden 사용량이 높고 GC 주기가 짧다면 → 객체 수명이 짧고 자주 생성됨
🔹 2. G1 Survivor Space (Heap 영역)
- 정의: Eden GC 후 살아남은 객체들이 잠시 머무는 공간
- 특징:
- Eden → Survivor → 일정 횟수 생존 후 Old Gen으로 이동
- 성능 테스트 주목 포인트:
- 크게 증가하지 않는 것이 정상 (작은 영역)
- 급격한 증가 또는 사용률 100%면 → Survivor 부족, Promotion 실패 가능성 ↑
- GC 튜닝 필요 시 Survivor 비율 확인 필수
🔹 3. G1 Old Gen (Heap 영역)
- 정의: 장기간 살아남은 객체가 저장되는 공간 (Tenured 영역)
- 특징:
- Old Gen이 가득 차면 Full GC 발생 → 성능에 큰 영향
- 성능 테스트 주목 포인트:
- 지속적인 증가는 누수 또는 객체 수명 길다는 신호
- Full GC 발생 여부와 타이밍 중요
- GC 튜닝/메모리 설정 부족 시 병목 원인
🔹 4. CodeCache (Non-Heap 영역)
- 정의: JIT 컴파일된 바이트코드가 저장되는 공간
- 특징:
- 일반적으로 Java 애플리케이션에서 많이 증가하진 않음