Java 11 버전의 GC는 많은 개선과 변화를 가지고 왔다.

 

ZGC(Z Garbage Collectors)란?

ZGC는 아래의 목표를 충족하기 위해 설계된 확장 가능하고 낮은 지연율(low latency)을 가진 GC이다.

  • 정지 시간이 최대 10ms를 초과하지 않음
  • Heap의 크기가 증가하더라도 정지 시간이 증가하지 않음
  • 8MB~16TB에 이르는 다양한 범위의 Heap 처리 가능

처음에는 Linux/x64을 지원했으며 현재는 아래와 같은 플랫폼에 지원되고 있다.

Platform Supported Since Comment
Windows O JDK 14 Requires Windows version 1803 (Windows 10 or Windows Server 2019) or later.
macOS O JDK 14  
Linux/x64 O JDK 11  
Linux/AArch64 O JDK 13  

JVM으로 구동되는 애플리케이션의 경우, GC가 동작할 때 Stop-The-World로 인해 성능에 큰 영향을 미쳐왔다.

이러한 정지 시간을 줄이거나, 없앰으로써 애플리케이션의 성능 향상에 기여한다. ZGC의 주요 원리는 Load barrier와 Colored Pointer를 함께 사용하는 것이다.

이를 통해 Thread가 동작하는 중간에도 ZGC가 객체 재배치 같은 작업을 수행할 수 있다.

ZGC 동작 ZGC는 메모리를 ZPages라고 불리는 영역으로 나눈다. ZPages는 동적 사이즈(G1 GC와 다름)로 2MB의 배수가 동적으로 생성 및 삭제될 수 있다.

 

ZGC 동작

ZGC는 메모리를 ZPages라고 불리는 영역으로 나눈다.

ZPages는 동적 사이즈(G1 GC와 다름)로 2MB의 배수가 동적으로 생성 및 삭제될 수 있다.

사이즈별 Heap 영역

  • Small(2MB)
  • Medium(32MB)
  • Large(N * 2MB)

중요 포인트

  • ZGC Heap은 위와 같은 다양한 사이즈의 영역이 여러 개 발생할 수 있다.
  • ZGC가 compaction된 후, ZPage는 ZPageCache라고 불리는 캐시에 삽입된다.
  • 캐시 안의 Zpage는 새로운 Heap 할당을 위해 재사용할 준비를 한다.
  • 메모리를 커밋과 커밋하지 않는 작업은 매우 비싼 작업이므로 캐시의 성능에 중요한 영향을 끼친다.

 

ZGC의 “Z”

아무 의미 없다.

원래 ZFS에 의해 영감을 받았거나 여러 면에서 처음 나와 혁명적인 의미를 가진다는 가설이 있었다.

하지만 Z는 그냥 이름일뿐이며 자세한 사항은 Jeff Bonwick’s Blog를 참조하길 바란다.

 

참조

https://01010011.blog/category/programming/

https://www.popit.kr/번역글-새로운-시대의-java를-맞이하며/

https://readystory.tistory.com/48

https://wiki.openjdk.java.net/display/zgc/Main