Technical NOTE

ZGC 에 대하여 본문

미들웨어/JEUS

ZGC 에 대하여

테크니컬노트 2024. 9. 27. 13:22
반응형

ZGC (Z Garbage Collector)는 Java 11에서 처음 도입된 가비지 컬렉터로, Java의 가비지 컬렉션 방식 중 하나입니다. ZGC의 가장 큰 목표는 초저지연 (low-latency)을 제공하는 것입니다. 이는 가비지 컬렉션(GC) 동안 애플리케이션이 멈추는 시간을 최소화하는 것을 의미합니다. ZGC는 대용량 메모리 환경에서도 10ms 미만의 짧은 GC 지연 시간을 유지하도록 설계되었습니다.

ZGC의 주요 특징

  1. 초저지연 GC (Low Latency)
    • ZGC는 대용량 힙(수 테라바이트까지 확장 가능)에서도 정지 시간을 10ms 미만으로 유지합니다.
    • 애플리케이션의 처리 중단 시간을 최소화하여, 실시간 성능을 요구하는 시스템에서 적합합니다.
  2. 컨커런트(Concurrent) 방식
    • 대부분의 가비지 컬렉션 작업이 애플리케이션 스레드와 병렬로 수행됩니다. 즉, 애플리케이션이 실행되는 동안 동시에 GC 작업이 이루어집니다.
    • 이 방식은 전통적인 "Stop-the-world" 방식과는 달리 긴 시간 동안 애플리케이션을 멈추지 않습니다.
  3. Region 기반 메모리 관리
    • ZGC는 메모리를 Region 단위로 관리하며, 각 Region의 크기는 동적으로 조절됩니다. 메모리 관리의 효율성을 높이고, GC 작업을 최적화합니다.
    • 이 방식은 G1 GC의 방식과 유사하나, ZGC는 훨씬 더 세밀하게 설계되어 있습니다.
  4. 색상 인지 포인터 (Colored Pointers)
    • ZGC는 객체 포인터에 추가적인 메타데이터 정보를 포함시키는 색상 인지 포인터(Colored Pointers)를 사용하여, 객체의 위치 및 상태(가비지 여부)를 빠르게 추적합니다.
    • 이를 통해 포인터 압축과 같은 기술을 활용할 수 있으며, 메모리 단편화를 줄이고 성능을 향상시킵니다.
  5. 가비지 컬렉션 과정의 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의 사용 예제 및 성능 분석을 다룹니다.


반응형