다중 테라 바이트 힙과 ZGC를 사용하면 몇 가지 성능이 영향을 줄 수 있습니다.
1. 낮은 대기 시간 : ZGC는 일시 중지 시간을 최소화하도록 설계되어 응용 프로그램이 큰 힙으로도 응답 상태를 유지하도록합니다. 응용 프로그램과 동시에 대부분의 쓰레기 수거 작업을 수행함으로써이를 달성하여 10ms 미만의 일시 중지 시간을 초래합니다 [3] [4].
2. 높은 처리량 : ZGC는 쓰레기 수집에 소요되는 시간을 최소화하여 높은 처리량을 제공하도록 설계되었습니다. 이렇게하면 메모리 사용 중에도 응용 프로그램이 효율적으로 계속 실행될 수 있습니다 [2] [4].
3. 멀티 맵핑 : ZGC는 멀티 맵핑을 사용하여 다른 범위의 가상 메모리를 동일한 물리적 메모리에 매핑합니다. 운영 체제가 추가 매핑으로 인해 3 배의 더 큰 메모리 사용량을보고 할 수 있으므로 메모리 사용이 증가 할 수 있습니다 [1].
4. 컬러 포인터 : ZGC는 컬러 포인터를 사용하여 64 비트 포인터에 메타 데이터를 저장합니다. 이로 인해 포인터를 해독 할 때 추가 작업이 발생할 수 있지만 멀티 맵핑 기술은 이러한 오버 헤드를 완화하는 데 도움이됩니다 [2].
5. Numa-Aware : 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--deep-dive-with-exam