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 알고리즘 비교

GCSTW처리량지연적합한 경우
Serial GC길다보통높음싱글 코어, 작은 힙
Parallel GC보통높음보통배치 처리, 처리량 중요
G1 GC짧다보통낮음대용량 힙, 균형잡힌 성능
ZGC매우 짧다보통매우 낮음초저지연 필요, 대용량 힙

주요 JVM 옵션

힙 크기 설정

-Xms512m -Xmx2g

초기 512MB, 최대 2GB

GC 선택

-XX:+UseG1GC

G1 GC 사용 (Java 9+ 기본)

GC 로그 출력

-Xlog:gc*:file=gc.log

GC 로그를 파일로 저장

힙 덤프

-XX:+HeapDumpOnOutOfMemoryError

OOM 시 힙 덤프 생성

GC 트러블슈팅

OutOfMemoryError: Java heap space
힙 메모리 부족. -Xmx 증가, 메모리 누수 확인, 객체 생명주기 점검.
GC 시간이 너무 김
Full GC 빈번 발생. Old Gen 크기 조정, G1/ZGC로 변경, 객체 할당률 줄이기.
메모리 누수 의심
힙 덤프 분석 (MAT, VisualVM),jmap,jstat으로 모니터링.