Technical NOTE
ZGC 에 대하여 본문
ZGC (Z Garbage Collector)는 Java 11에서 처음 도입된 가비지 컬렉터로, Java의 가비지 컬렉션 방식 중 하나입니다. ZGC의 가장 큰 목표는 초저지연 (low-latency)을 제공하는 것입니다. 이는 가비지 컬렉션(GC) 동안 애플리케이션이 멈추는 시간을 최소화하는 것을 의미합니다. ZGC는 대용량 메모리 환경에서도 10ms 미만의 짧은 GC 지연 시간을 유지하도록 설계되었습니다.
ZGC의 주요 특징
- 초저지연 GC (Low Latency)
- ZGC는 대용량 힙(수 테라바이트까지 확장 가능)에서도 정지 시간을 10ms 미만으로 유지합니다.
- 애플리케이션의 처리 중단 시간을 최소화하여, 실시간 성능을 요구하는 시스템에서 적합합니다.
- 컨커런트(Concurrent) 방식
- 대부분의 가비지 컬렉션 작업이 애플리케이션 스레드와 병렬로 수행됩니다. 즉, 애플리케이션이 실행되는 동안 동시에 GC 작업이 이루어집니다.
- 이 방식은 전통적인 "Stop-the-world" 방식과는 달리 긴 시간 동안 애플리케이션을 멈추지 않습니다.
- Region 기반 메모리 관리
- ZGC는 메모리를 Region 단위로 관리하며, 각 Region의 크기는 동적으로 조절됩니다. 메모리 관리의 효율성을 높이고, GC 작업을 최적화합니다.
- 이 방식은 G1 GC의 방식과 유사하나, ZGC는 훨씬 더 세밀하게 설계되어 있습니다.
- 색상 인지 포인터 (Colored Pointers)
- ZGC는 객체 포인터에 추가적인 메타데이터 정보를 포함시키는 색상 인지 포인터(Colored Pointers)를 사용하여, 객체의 위치 및 상태(가비지 여부)를 빠르게 추적합니다.
- 이를 통해 포인터 압축과 같은 기술을 활용할 수 있으며, 메모리 단편화를 줄이고 성능을 향상시킵니다.
- 가비지 컬렉션 과정의 3단계
- Mark: 힙에 있는 객체들을 추적하고, 접근할 수 없는 객체를 표시합니다.
- Relocate: 객체를 새로운 메모리 위치로 이동시키며, 이 과정 또한 애플리케이션 스레드와 병렬로 수행됩니다.
- Remap: 이동된 객체들의 참조를 최신 상태로 갱신합니다.
ZGC의 장점과 단점
장점 | 단점 |
---|---|
초저지연: 대용량 메모리에서도 지연 시간 10ms 미만 | CPU 사용량이 많아, 고성능 환경에서 주로 사용됨 |
매우 짧은 정지 시간 (Stop-the-world 최소화) | Java 11 이상에서만 사용 가능 |
병렬 GC로, 대부분의 작업을 애플리케이션과 병렬로 수행 | 비교적 새로운 기술로, 일부 경우에서 예측 불가능한 동작 가능 |
대용량 힙 지원 (수 테라바이트까지 가능) | 높은 메모리 오버헤드 가능성 |
ZGC를 사용하는 상황
- 대용량 데이터 처리: 예를 들어, 데이터베이스 서버, 빅 데이터 처리 시스템 등.
- 지연에 민감한 애플리케이션: 온라인 트랜잭션 시스템, 금융 거래 시스템, 실시간 애플리케이션.
- 메모리 사용이 많은 애플리케이션: ZGC는 수십 기가바이트에서 수 테라바이트까지 힙 크기를 효과적으로 관리할 수 있어, 메모리 사용량이 큰 애플리케이션에 적합합니다.
ZGC의 사용 방법
ZGC를 사용하려면 JVM 옵션에 -XX:+UseZGC
를 추가하면 됩니다.
java -XX:+UseZGC -Xmx10g -jar MyApp.jar
이 설정으로 ZGC를 활성화하고 애플리케이션을 실행할 수 있습니다.
ZGC는 고성능 및 대규모 메모리 환경에서 초저지연을 요구하는 시스템에 적합한 선택입니다. G1 GC 또는 Parallel GC와 비교하여 지연 시간을 크게 줄일 수 있지만, 시스템 리소스를 더 많이 사용하게 됩니다.
출처
1. [Java 공식 문서 (Oracle Documentation)](https://docs.oracle.com/en/java/javase/11/gctuning/index.html) - Java 11부터 포함된 ZGC에 대한 가이드와 설정 방법, 동작 원리 등을 다룹니다.
2. [OpenJDK ZGC Wiki](https://wiki.openjdk.org/display/zgc/Main) - OpenJDK에서 제공하는 ZGC의 상세한 기술 정보와 개발 진행 상황을 확인할 수 있습니다.
3. [Java Performance Tuning](https://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html) - 다양한 GC 옵션과 성능 튜닝 가이드 중 ZGC에 대한 설명이 포함되어 있습니다.
4. 기술 블로그 및 포럼 - [Baeldung](https://www.baeldung.com/java-14-zgc)과 같은 Java 관련 기술 블로그에서도 ZGC의 사용 예제 및 성능 분석을 다룹니다.
'미들웨어 > JEUS' 카테고리의 다른 글
G1 GC 에 대해 (0) | 2024.09.27 |
---|---|
ZGC 사용시 주의해야할 점과 적합한 환경 검토 (1) | 2024.09.27 |
SpringFramework 버전별 JavaEE(JakartaEE) 버전 정리 (0) | 2024.09.24 |
전자정부 표준프레임워크 4.2 - JEUS 호환성 (0) | 2024.09.05 |
JEUS 버전별 JDK 호환 버전 목록 (0) | 2024.09.04 |