Post
KO

ZGC

https://johngrib.github.io/wiki/java-gc-zgc/

ZGC, The Z Garbage Collector

작성중인 문서

ZGC는 확장 가능한 낮은 레이턴시의 GC이다.

Low Latency: GC 일시 정지 시간이 10ms 미만이다.

Scalable: heap 사이즈나 라이브셋의 사이즈가 커져도 일시 정지 시간이 늘어나지 않는다.

JDK16발표 자료에서 ZGC확인할 수 있었다.

JEP 376: ZGC: 동시 스레드 스택 처리 – ZGC 스레드 스택 처리를 안전점(safepoint)에서 동시 (concurrent) 단계로 이동한다. 해당 작업을 통해 동시 스택 처리로 이어지는 최종 주요 병목 현상을 제거할 수 있다.

ZGC(Z Garbage Collector)는 Java 11에서 실험적으로 도입되었고 Java 15부터는 제한 없이 사용 가능한 가비지 컬렉터입니다. ZGC의 목적은 짧은 GC(Garbage Collection) 중단 시간(STW, Stop-The-World)을 유지하면서도 큰 힙 크기를 지원하는 것입니다. 다음은 ZGC의 주요 특징입니다:

낮은 지연 시간

ZGC는 지연 시간을 10밀리초 미만으로 낮추는 것을 목표로 합니다. 이는 멀티스레드를 활용하여 대부분의 가비지 컬렉션 작업을 애플리케이션 스레드와 동시에 실행함으로써 달성됩니다.

확장성

ZGC는 작은 힙에서부터 수백 기가바이트 규모의 큰 힙에 이르기까지 확장 가능합니다. 가비지 컬렉션의 성능은 힙 크기에 비례하지 않으므로, 큰 힙을 사용하는 애플리케이션도 낮은 지연 시간을 유지할 수 있습니다.

동시성

ZGC는 애플리케이션 스레드와 동시에 작동합니다. 가비지 컬렉션 단계 중 상당수가 애플리케이션 실행 중에 수행되므로, 가비지 컬렉션으로 인한 중단 시간이 매우 짧습니다.

가비지 컬렉션 단계

ZGC의 가비지 컬렉션은 몇 가지 단계로 이루어집니다. 마킹(Marking), 재배치(Relocation), 다시 매핑(Remapping)이 주요 단계입니다. 각 단계는 기본적으로 동시에 수행되지만, 재배치 단계 중에는 짧은 STW 중단이 필요합니다.

컬러 포인터(Color Pointer)와 로드 배리어(Load Barrier)

ZGC는 컬러 포인터와 로드 배리어를 사용하여 힙 메모리의 라이브(live) 객체를 추적하고 관리합니다. 이를 통해 힙 메모리의 객체를 효율적으로 재배치하고 메모리 단편화를 방지합니다.

가상 메모리

ZGC는 가상 메모리의 커다란 단일 영역을 힙으로 사용합니다. 이를 통해 메모리 관리가 용이해지며, 메모리 단편화 문제를 줄일 수 있습니다.

사용법

ZGC를 사용하려면 Java 실행 시 다음 JVM 옵션을 추가합니다:

-XX:+UseZGC

ZGC는 모든 유형의 애플리케이션에 적합한 것은 아닙니다. 애플리케이션이 낮은 지연 시간을 요구하거나 매우 큰 힙을 사용하는 경우 ZGC를 고려해볼 수 있습니다. 그러나 ZGC는 아직 모든 플랫폼에서 지원되는 것은 아니므로 특정 환경에서 사용 가능한지 확인해야 합니다.

This article is licensed under CC BY 4.0 by the author.