JVMGCReal-time
JVM 메모리 구조 & Garbage Collection
Java 애플리케이션의 메모리 관리를 담당하는 JVM 힙 구조와 Garbage Collection의 동작 원리를 실시간으로 모니터링하고, 다양한 JVM 버전별 GC 성능을 비교합니다.
JVM 메모리 구조
Heap (힙)
객체와 배열이 저장되는 영역. GC의 대상.
Eden - 새 객체 할당
Survivor (S0, S1) - GC 생존 객체
Old Gen - 오래 살아남은 객체
Non-Heap
JVM 내부 데이터가 저장되는 영역.
Metaspace - 클래스 메타데이터
Code Cache - JIT 컴파일 코드
Stack - 스레드별 메서드 콜스택
객체 생명주기
new Object()Eden(Minor GC)Survivor(age++)Old Gen
객체는 Eden에서 생성되고, GC를 거치며 Survivor → Old로 승격됩니다 (기본 age threshold: 15)
Garbage Collection 종류
Minor GC (Young GC)
Young Generation만 대상. 빠르고 자주 발생.
Stop-the-World 짧음 (ms)
대부분 객체가 여기서 수집됨
Major GC (Full GC)
전체 힙 대상. 느리고 가끔 발생.
Stop-the-World 김 (sec)
응답 지연 유발 가능
실시간 JVM 모니터링
현재 실행 중인 백엔드 JVM의 메모리 사용량과 GC 활동을 실시간으로 모니터링합니다. 메모리를 할당하고 해제하면서 GC 동작을 관찰해보세요.
JVM 메모리 & GC 실시간 모니터링
연결 끊김
힙 메모리 사용량 (실시간)
세대별 메모리 사용량
힙 메모리 분석 (Heap Dump)
현재 JVM의 힙 히스토그램을 조회하고, 테스트 객체를 할당하여 메모리 사용 패턴을 분석합니다. .hprof 힙 덤프 파일을 생성하여 MAT 등으로 상세 분석할 수 있습니다.
힙 메모리 분석
JVM 버전별 GC 성능 비교
시스템에 설치된 여러 Java 버전 (8, 11, 17, 21 등)으로 실제 벤치마크를 실행하고 GC 알고리즘별 성능 차이를 비교합니다.
JVM 버전별 GC 성능 비교
Step 1어떤 애플리케이션을 만드시나요?
웹 서비스에서 중요한 지표: P99 Pause Time
사용자 요청 중 GC로 인한 응답 지연을 최소화해야 합니다. P99는 99%의 요청이 이 시간 내에 완료됨을 의미합니다.
권장: G1 GC (Java 11+) 또는 ZGC (Java 17+) 권장
Step 2비교할 버전과 GC 선택
Java 버전
GC 알고리즘
GC 알고리즘 비교
| GC | STW | 처리량 | 지연 | 적합한 경우 |
|---|---|---|---|---|
| Serial GC | 길다 | 보통 | 높음 | 싱글 코어, 작은 힙 |
| Parallel GC | 보통 | 높음 | 보통 | 배치 처리, 처리량 중요 |
| G1 GC | 짧다 | 보통 | 낮음 | 대용량 힙, 균형잡힌 성능 |
| ZGC | 매우 짧다 | 보통 | 매우 낮음 | 초저지연 필요, 대용량 힙 |
주요 JVM 옵션
힙 크기 설정
-Xms512m -Xmx2g초기 512MB, 최대 2GB
GC 선택
-XX:+UseG1GCG1 GC 사용 (Java 9+ 기본)
GC 로그 출력
-Xlog:gc*:file=gc.logGC 로그를 파일로 저장
힙 덤프
-XX:+HeapDumpOnOutOfMemoryErrorOOM 시 힙 덤프 생성
GC 트러블슈팅
OutOfMemoryError: Java heap space
힙 메모리 부족.
-Xmx 증가, 메모리 누수 확인, 객체 생명주기 점검.GC 시간이 너무 김
Full GC 빈번 발생. Old Gen 크기 조정, G1/ZGC로 변경, 객체 할당률 줄이기.
메모리 누수 의심
힙 덤프 분석 (MAT, VisualVM),
jmap,jstat으로 모니터링.