Technical NOTE
ZGC에 대한 일반적인 내용 요약 본문
ZGC 방식에 대한 내용을 정리해보았습니다.
ZGC의 경우 Java 17에서 본격적으로 사용되기 시작하다보니, 아직 공공쪽에는 레퍼런스를 찾을 수 없는 상태인데요,
그래서 다른 싸이트를 참조해서 내용을 정리해봤습니다.
정리하지만,
G1 GC의 경우에는 힙메모리 4G 이상에서 사용할 것을 권장하고 있는데요,
ZGC의 경우에는 힙메모리 10G 이상인 경우 설정하는 것이 좋을 것으로 판단됩니다.
아래는 ZGC에 대한 일반적인 기술 특징과 적합환 환경에 대한 기술적인 내용이니 참고하시기 바랍니다.
1. ZGC 방식의 일반적인 특징
- Java 11 에서 실험적인 기능으로 추가되었고, Java 15버전 이후에 본격적으로 반영된 후 17버전에도 기능이 추가되어 있음
- ZGC는 대용량 메모리 관리시 정지시간을 최소화하기 위해 low-latency 를 목표로 개발한 GC 방식
- GC수행시 멀티 쓰레드 방식을 사용한 Concurrent 방식을 지원하고 있음
- G1 GC와 유사하게 Region 단위로 힙 메모리를 관리하고 있음
2. ZGC의 3가지 단계
- Mark : 힙에 있는 객체를 추적해서 불필요한 오브젝트를 표시해주는 단계
- Relocate : 살아있는 객체는 새로운 메모리 위치로 이동시키는 단계. 이 때 쓰레드를 이용해 병렬로 수행됨
- Remap : 이동한 객체들의 Reference를 최신의 상태로 Update해줌
3. ZGC의 장단점
장점 | 단점 |
low latency - 대용량 메모리에서도 지연 시간이 10ms 미만 |
많은 CPU 사용량 필요하여 고성능 서버에서 주로 사용됨 |
매우 짧은 stop-the-world 최소화 | Java 11 이상에서 사용 가능함 |
Parallel GC - Application과 병렬로 수행됨 |
비교적 새로운 기술이라, 레퍼런스가 부족하여 예측 불가능 동작 유발 가능성 |
대용량 Heap Size 지원 - 수 Tera Byte 환경도 지원 가능 |
메모리 오버헤드 높을 수 있음 |
4. ZGC를 사용하는 상황
- 대용량 데이터 처리
- 지연(latency)에 민감한 어플리케이션
- 메모리 사용량이 많은 어플리케이션
5. ZGC 사용에 적합한 환경 검토
- 대규모 힙 메모리를 효과적으로 관리하는데 최적화되어 있으므로,
- 힙 메모리가 클수록 ZGC의 장점이 극대화될 수 있음
- 힙 메모리 10G 미만의 경우, Parallel GC와 G1 GC 등과 같은 가비지 컬렉터가 성능이 좋음
- 힙 메모리 10G ~ 50G 정도의 경우, ZGC가 효과적일 수 있음
- 힙 메모리 50G 이상의 경우, ZGC가 매우 적합한 GC 방식임
이상입니다.