수테라바이트 힙과 함께 ZGC를 사용하면 성능에 여러 가지 영향을 미칠 수 있습니다.
1. 낮은 대기 시간: ZGC는 일시 중지 시간을 최소화하도록 설계되어 힙이 큰 경우에도 애플리케이션이 계속 응답하도록 보장합니다. 대부분의 가비지 수집 작업을 애플리케이션과 동시에 수행하여 이를 달성하므로 일시 중지 시간이 10ms 미만입니다[3][4].
2. 높은 처리량: ZGC는 가비지 수집에 소요되는 시간을 최소화하여 높은 처리량을 제공하도록 설계되었습니다. 이렇게 하면 메모리 사용량이 많은 경우에도 애플리케이션이 계속 효율적으로 실행될 수 있습니다[2][4].
3. 다중 매핑: ZGC는 다중 매핑을 사용하여 다양한 범위의 가상 메모리를 동일한 물리적 메모리에 매핑합니다. 추가 매핑으로 인해 운영 체제에서 3배 더 큰 메모리 사용량을 보고할 수 있으므로 이로 인해 메모리 사용량이 증가할 수 있습니다[1].
4. 컬러 포인터: ZGC는 컬러 포인터를 사용하여 64비트 포인터에 메타데이터를 저장합니다. 이로 인해 포인터를 역참조할 때 추가 작업이 발생할 수 있지만 다중 매핑 기술은 이러한 오버헤드를 완화하는 데 도움이 됩니다[2].
5. NUMA 인식: ZGC는 NUMA를 인식하도록 설계되었습니다. 즉, 대규모 힙과 여러 CPU 코어를 효율적으로 처리할 수 있습니다. 이렇게 하면 가비지 수집기가 사용 가능한 하드웨어 리소스[2][4]를 활용할 수 있습니다.
6. 조정 옵션: ZGC에는 최대 힙 크기 및 동시 GC 스레드 수 설정과 같은 여러 가지 조정 옵션이 있습니다. 이러한 옵션은 메모리 사용량과 가비지 수집 성능의 균형을 맞추는 데 도움이 될 수 있습니다[3][4].
7. 실험적 기능: ZGC는 실험적 기능이며 활성화하려면 특정 명령줄 옵션이 필요합니다. 매우 짧은 일시 중지 시간이 필요하고 대규모 메모리 할당을 처리할 수 있는 애플리케이션에 적합합니다[1][3].
요약하면, 멀티테라바이트 힙이 포함된 ZGC를 사용하면 짧은 대기 시간, 높은 처리량 및 효율적인 메모리 관리를 제공할 수 있습니다. 그러나 세심한 조정이 필요하며 다중 매핑으로 인해 메모리 사용량이 증가할 수 있습니다.
인용:[1] https://stackoverflow.com/questions/62926652/the-java-zgc-garbage-collector-uses-a-lot-of-memory
[2] https://www.opsian.com/blog/javas-new-zgc-is-very-exciting/
[3] https://docs.oracle.com/en/java/javase/11/gctuning/z-garbage-collector1.html
[4] https://developers.redhat.com/articles/2021/11/02/how-choose-best-java-garbage-collector
[5] https://dzone.com/articles/java-z-garbage-collector-zgc-a-deep-dive-with-exam