<aside>

JVM 시리즈

  1. 왜 JVM을 알아야 할까 (+ JVM 구조 한눈에 보기)
  2. JVM의 메모리 - Runtime Data Area
  3. Class Loader와 부모 위임 원칙
  4. 실행 엔진: 인터프리터와 JIT 컴파일러
  5. Garbage Collection
  6. GC 튜닝
  7. 가짜 JVM 만들어보기 </aside>

GC 로그 보는 법 (Xlog:gc*)

GC 튜닝의 시작은 GC 로그를 분석하는 것! 자바 9 이상에서는 -Xlog 옵션을 통해 매우 상세하고 정형화된 로그를 출력할 수 있다.

예시:

- Xlog:gc*:stdout:time,uptime,level,tags

이 옵션은 GC 이벤트의 시작 시간, 경과 시간, 어떤 유형의 GC가 발생했는지, 얼마나 많은 메모리를 회수했는지 등을 보여준다. 로그를 기반으로 Minor GC와 Full GC 발생 주기, 정지 시간(Pause Time), 메모리 회수 효율 등을 분석할 수 있다.

자주 쓰는 GC 옵션

옵션 설명
-XX:+UseG1GC G1 GC를 사용하도록 설정 (Java 9 이상 기본값)
-XX:+PrintGCDetails GC 상세 로그 출력 (Java 8 이전에서 주로 사용)
-XX:+PrintGCDateStamps GC 발생 시각 출력
-Xloggc:<file> GC 로그를 파일로 저장
-XX:MaxGCPauseMillis=<ms> G1 GC의 최대 정지 시간 목표 설정
-XX:InitiatingHeapOccupancyPercent=45 G1 GC에서 Mixed GC 발생 시점 조정 (Old 영역의 사용률 기준)

이 외에도 GC 알고리즘마다 특화된 옵션이 있으며, 조합에 따라 GC 동작 방식이 달라질 수 있다.


Heap 사이즈 설정 (Xms, Xmx)

Heap 크기를 명시적으로 설정함으로써 JVM이 불필요한 동적 힙 확장/축소를 하지 않도록 제한할 수 있다.

-Xms512m -Xmx2048m

위 예시는 초기 힙을 512MB, 최대 힙을 2GB로 설정하는 것이다.