2025-03-26
GC(Garbage Collector) 벤치마크 테스트: G1GC vs ZGC vs GenZGC
GC(Garbage Collector) 벤치마크 테스트: G1GC vs ZGC vs GenZGC
Java의 세 가지 가비지 컬렉터를 벤치마크 테스트를 통해 비교합니다.
벤치마크 소스 코드: https://github.com/ongjin/gc-benchmark.git
벤치마크 결과
G1GC
- 실행 시간: 72.344초
- GC 사이클: 2,004회
- 총 일시 정지 시간: 28,866ms
- 사용된 컬렉터: Young Generation, Concurrent GC, Old Generation
ZGC
- 실행 시간: 47.4초
- GC 사이클: 920회
- 총 일시 정지 시간: 2,319ms
- 사용된 컬렉터: Cycles and Pauses
GenZGC
- 실행 시간: 47.705초
- GC 사이클: 886회
- 총 일시 정지 시간: 2,588ms
- 사용된 컬렉터: Minor/Major Cycles and Pauses
결과 비교
| GC | 실행 시간 | GC 사이클 | 일시 정지 시간 |
|---|---|---|---|
| G1GC | 72.344s | 2,004 | 28,866ms |
| ZGC | 47.4s | 920 | 2,319ms |
| GenZGC | 47.705s | 886 | 2,588ms |
분석
테스트 결과 ZGC와 GenZGC가 G1GC 대비 크게 우수한 성능을 보여줍니다.
- 실행 시간: ZGC와 GenZGC가 G1GC 대비 약 34% 더 빠름
- 일시 정지 시간: ZGC가 G1GC 대비 약 92% 감소 (28,866ms → 2,319ms)
- GC 사이클: ZGC와 GenZGC가 G1GC 대비 약 55% 적은 사이클
ZGC는 일시 정지 시간을 극적으로 줄이면서도 비슷한 총 실행 시간을 유지합니다. GenZGC는 ZGC와 유사한 성능을 보이며 세대별(Generational) 접근 방식을 통해 GC 사이클 수를 가장 적게 유지합니다.
관련 글
벡터 유사도 기반65% 일치
JVM 구조
JVM의 내부 구조를 정리합니다. Class Loader, Runtime Data Area, Execution Engine, Native Interface까지 전체적인 JVM 아키텍처를 다룹니다.
60% 일치Java 8에서 25까지 — 단계적 마이그레이션으로 보일러플레이트 900줄 제거한 이야기
Java 8 + Spring Boot 2.x 레거시를 Java 25 + Spring Boot 3.5로 단계적 마이그레이션하며 겪은 실전 경험을 공유합니다.
54% 일치스프링 내부 구조 정리
스프링의 핵심 내부 구조를 실제 코드와 테스트를 통해 정리합니다. IoC 컨테이너, Bean 생명주기, AOP, 의존성 주입 방식을 다룹니다.