JVM의 메모리 관리에서 핵심적인 역할을 수행하는
Garbage Collection(GC)의 동작 원리와 대표적인 GC 알고리즘에 대해 정리하였다.
GC는 힙 영역에서 더 이상 사용되지 않는 객체를 자동으로 탐지하고 회수하는 기능으로,
자바의 자동 메모리 관리의 핵심이라 할 수 있다.
1. GC의 역할
- JVM의 힙 메모리는 제한된 공간이므로, 불필요한 객체를 자동으로 제거하여 공간을 확보해야 한다.
- GC는 실행 중인 애플리케이션의 객체 중 더 이상 참조되지 않는 객체를 탐색하여 제거한다.
- 자바는 개발자가 직접 메모리를 해제하지 않아도 되는 대신, GC를 이해하지 않으면 예기치 않은 성능 저하가 발생할 수 있다.
2. 힙 구조와 GC 대상
| 구역 | 설명 |
|---|---|
| Young Generation | 새롭게 생성된 객체가 위치 (Eden, Survivor S0/S1) |
| Old Generation | 오래 살아남은 객체들이 이동 (Major GC 대상) |
| Metaspace | 클래스 메타정보 저장 (PermGen 대체 영역) |
GC는 주로 Young 영역에서 자주 발생 (Minor GC) 하며,
Old 영역에서의 GC는 더 무겁고 정지 시간이 길다 (Major GC 또는 Full GC).
3. GC 알고리즘 종류
✅ Serial GC
- 단일 스레드 기반, 정지 시간 길고 단순
- 작은 메모리, 단일 코어 환경에 적합
✅ Parallel GC
- 멀티 스레드 기반, Throughput 중심
- GC는 빠르지만, Stop-the-World 발생
✅ CMS (Concurrent Mark-Sweep)
- 사용자 스레드와 병행하여 동작
- 낮은 지연(Low Latency) but Fragmentation 문제 있음
✅ G1 GC
- 힙을 Region 단위로 나누어 관리
- 병렬/병행/분할 수집 지원, 대부분의 상황에 권장
✅ ZGC, Shenandoah (신규 GC)
- 매우 짧은 정지 시간 목표
- 대용량 힙, 실시간 처리에 적합 (JDK 11+)
4. GC 튜닝을 위한 주요 옵션
-Xms512m # 초기 힙 크기
-Xmx2048m # 최대 힙 크기
-XX:+UseG1GC # G1 GC 사용
-XX:+PrintGCDetails -Xlog:gc # GC 로그 출력
GC 튜닝은 메모리 사용량과 지연 시간 간의 균형을 맞추는 것이 핵심이다.
학습 정리
GC는 자바의 자동 메모리 관리를 가능하게 해주는 핵심 기능이다.
GC 알고리즘은 사용 환경에 따라 선택과 튜닝이 필요하며,
특히 대규모 트래픽, 응답 지연 최소화, 메모리 누수 추적 등에 있어 GC의 특성을 이해하고 있어야 효과적인 운영이 가능하다.
'CS공부 > Java & Spring' 카테고리의 다른 글
| Spring 내부 구조 - DispatcherServlet, 요청 흐름, 에러 처리 (0) | 2025.04.22 |
|---|---|
| Spring Boot @Transactional 어노테이션 (0) | 2025.04.22 |
| Spring Boot 프로젝트 horong 리팩토링 (1) | 2025.04.22 |
| 힙 메모리 누수 (0) | 2025.04.22 |
| JVM과 힙, 스택 (0) | 2025.04.21 |