Java GC 종류와 특징(G1GC, ZGC 등) 완벽 이해하기
Java 실무에서 JVM 성능을 결정하는 핵심 요소 중 하나가 바로:
Garbage Collector(GC) 종류 선택
입니다.
특히 대규모 서비스에서는:
- 응답 속도
- 서버 멈춤(STW)
- TPS
- 메모리 사용량
- 장애 발생률
까지 GC 종류에 따라 크게 달라질 수 있습니다.
초보 시절에는 보통:
GC는 그냥 자동 메모리 정리 기능
정도로 이해하기 쉽습니다.
하지만 실제로는:
- 어떤 GC를 쓰는가
- Heap 구조를 어떻게 관리하는가
- Pause Time을 얼마나 줄이는가
가 JVM 성능 핵심입니다.
이번 글에서는:
- Serial GC
- Parallel GC
- CMS
- G1GC
- ZGC
- Shenandoah
까지 Java GC 종류와 특징을 실무 관점으로 깊게 정리해보겠습니다.
1. 왜 GC 종류가 여러 개일까?
GC 목표는 서로 충돌합니다.
예:
| 목표 | 설명 |
| Throughput | 처리량 극대화 |
| Low Latency | 멈춤 최소화 |
| 메모리 효율 | Heap 절약 |
| CPU 효율 | CPU 부담 감소 |
즉:
“모든 걸 동시에 완벽하게”
하기 어려움.
그래서 다양한 GC 등장.
2. GC 핵심 성능 지표
매우 중요합니다.
| 지표 | 의미 |
| Throughput | 전체 처리량 |
| Pause Time | STW 시간 |
| Latency | 응답 지연 |
| Footprint | 메모리 사용량 |
3. Stop-The-World(STW) 다시 이해하기
GC 수행 중 JVM은 보통:
애플리케이션 스레드 중단
합니다.
즉:
- API 멈춤
- 요청 지연
- 서버 멈춤 현상
발생 가능.
4. 초기 GC: Serial GC
가장 오래된 GC.
특징:
단일 스레드 GC
입니다.
5. Serial GC 구조
동작:
GC 스레드 1개
↓
모든 메모리 처리
6. Serial GC 장점
| 장점 | 설명 |
| 구현 단순 | O |
| 작은 앱 효율적 | O |
| 오버헤드 적음 | O |
7. Serial GC 단점
문제:
STW 매우 길어질 수 있음
즉 서버 환경에는 부적합.
8. Parallel GC
Java 8 기본 GC.
특징:
GC 작업을 여러 스레드 병렬 처리
9. Parallel GC 목표
핵심 목표:
Throughput 극대화
즉:
전체 처리량 우선
입니다.
10. Parallel GC 장점
| 장점 | 설명 |
| 처리량 좋음 | O |
| 멀티코어 활용 | O |
| 서버 처리 성능 우수 | O |
11. Parallel GC 단점
문제:
Pause Time 길 수 있음
즉:
- 대규모 Heap
- 실시간 서비스
에서는 불리 가능.
12. CMS GC 등장 배경
문제:
“STW 너무 길다”
해결 목적.
13. CMS(Concurrent Mark Sweep)
Concurrent Mark Sweep 특징:
애플리케이션과 동시에 GC 수행
즉:
Concurrent GC
시도.
14. CMS 핵심 목표
Low Pause
즉:
멈춤 최소화
15. CMS 동작 단계
구조:
Initial Mark (STW)
Concurrent Mark
Remark (STW)
Concurrent Sweep
16. CMS 장점
| 장점 | 설명 |
| Pause 감소 | O |
| 응답속도 향상 | O |
| 대화형 서비스 적합 | O |
17. CMS 단점
문제:
| 문제 | 설명 |
| 메모리 단편화 | 심함 |
| CPU 사용량 증가 | O |
| Full GC 위험 | 존재 |
18. 왜 CMS가 사라졌을까?
Java 14부터 제거.
이유:
G1GC가 더 발전했기 때문
19. G1GC 등장
Garbage-First Garbage Collector 는:
현대 JVM 대표 GC
입니다.
Java 9 이후 기본 GC.
20. G1GC 핵심 특징
기존 Heap 구조:
Young
Old
분리 기반.
21. G1GC는 Region 기반
Heap을:
작은 Region 단위
로 나눔.
예:
[Region][Region][Region]
22. 왜 Region 기반일까?
목표:
“필요한 영역만 수집”
즉:
- 효율 증가
- Pause 감소
가능.
23. G1GC 이름 의미
Garbage First
즉:
가비지가 많은 영역 우선 수집
합니다.
24. G1GC 장점
| 장점 | 설명 |
| Pause 예측 가능 | O |
| 대용량 Heap 대응 | O |
| Full GC 감소 | O |
| 현대 서버 적합 | O |
25. G1GC 단점
| 단점 | 설명 |
| CPU 오버헤드 | 존재 |
| 작은 Heap 효율 낮을 수 있음 | O |
26. G1GC가 기본 GC가 된 이유
핵심:
Throughput + Low Pause 균형
이 좋기 때문.
27. ZGC 등장 배경
문제:
Heap 수백 GB~TB
규모 증가.
기존 GC Pause도 부담.
28. ZGC란?
Z Garbage Collector 는:
초저지연(Low Latency) GC
입니다.
29. ZGC 핵심 목표
Pause Time 10ms 이하
목표.
심지어 TB Heap에서도.
30. ZGC 특징
| 특징 | 설명 |
| Concurrent 처리 | 매우 많음 |
| Pause 극소화 | O |
| 대용량 Heap | 매우 강함 |
31. ZGC 핵심 기술
대표 기술:
Colored Pointer
Load Barrier
32. Colored Pointer란?
객체 포인터에:
GC 상태 정보 포함
시키는 기술.
매우 고급 JVM 기술.
33. ZGC 장점
| 장점 | 설명 |
| 초저지연 | 매우 강력 |
| 대규모 서버 적합 | O |
| Pause 거의 안 느낌 | O |
34. ZGC 단점
| 단점 | 설명 |
| CPU 사용량 증가 가능 | O |
| 작은 서비스엔 과할 수 있음 | O |
35. Shenandoah GC
Shenandoah GC 는:
RedHat 중심 저지연 GC
입니다.
36. Shenandoah 특징
목표:
Pause Time Heap 크기와 무관
하게 만드는 것.
37. GC 종류 비교
| GC | 특징 | 장점 | 단점 |
| Serial | 단일 스레드 | 단순 | 느림 |
| Parallel | Throughput 중심 | 빠름 | Pause 큼 |
| CMS | Low Pause | 응답성 | 단편화 |
| G1GC | 균형형 | 범용성 | 오버헤드 |
| ZGC | 초저지연 | Pause 매우 짧음 | CPU 부담 |
| Shenandoah | 저지연 | 안정적 | 환경 제한 |
38. 실무에서 어떤 GC 많이 쓸까?
현재 기준:
| 환경 | 추천 |
| 일반 Spring 서버 | G1GC |
| 초대형 서비스 | ZGC |
| 작은 앱 | Parallel GC 가능 |
39. GC 선택보다 중요한 것
매우 중요합니다.
GC보다 더 중요한 건:
객체 생성 패턴
입니다.
40. 안 좋은 코드 예시
while(true) {
new Object();
}
GC 어떤 걸 써도 힘듦.
41. 실무 튜닝 핵심
우선순위:
객체 생성 줄이기
↓
Heap 튜닝
↓
GC 튜닝
입니다.
42. JVM 옵션 예시
G1GC 사용:
-XX:+UseG1GC
설명:
| 옵션 | 의미 |
| -XX:+UseG1GC | G1GC 활성화 |
43. ZGC 사용
-XX:+UseZGC
설명:
| 옵션 | 의미 |
| -XX:+UseZGC | ZGC 활성화 |
44. GC 로그 분석 중요
대표 옵션:
-Xlog:gc*
설명:
| 옵션 | 의미 |
| -Xlog:gc* | 상세 GC 로그 |
45. 실무에서 자주 하는 실수
1) GC만 바꾸면 성능 해결된다고 착각
대부분은:
객체 생성 구조 문제
인 경우 많음.
2) Heap 무조건 크게 설정
Heap 커지면:
Full GC 더 오래 걸릴 수도 있음
3) GC 로그 안 보고 추측 튜닝
매우 위험.
46. 가장 중요한 핵심 한 줄
GC 종류는
“처리량”과 “응답속도” 사이의 선택이다
입니다.
47. 정리
GC 종류는 단순 JVM 옵션이 아닙니다.
실제로는:
- Heap 구조
- 서버 응답성
- 대규모 시스템 안정성
- 객체 생명주기
- JVM 성능 전략
전체와 연결되는 매우 중요한 시스템입니다.
특히 실무에서는:
- Parallel GC
- G1GC
- ZGC
- Stop-The-World
- Heap 튜닝
을 정확히 이해하는 것이 매우 중요합니다.
다음 글에서는:
OutOfMemoryError 원인 분석
을 Heap Dump, Memory Leak, Metaspace OOM, Thread Leak까지 포함해서 실무 장애 분석 관점으로 깊게 정리해보겠습니다.
'language > java' 카테고리의 다른 글
| Java JIT Compiler 동작 원리 완벽 이해하기 (0) | 2026.05.26 |
|---|---|
| Java OutOfMemoryError(OOM) 원인 분석 완벽 이해하기 (0) | 2026.05.26 |
| Java Garbage Collector(GC) 원리 완벽 이해하기 (0) | 2026.05.26 |
| Java String Pool 원리 완벽 이해하기 (0) | 2026.05.26 |
| Java 참조 타입(Reference Type)과 객체 참조 완벽 이해하기 (0) | 2026.05.26 |
댓글