셰넌도어 및 ZGC의 주요 사용 사례는 다음과 같습니다.
셰넌도어 GC:
1. 낮은 대기 시간: Shenandoah는 대부분의 가비지 수집 작업을 애플리케이션과 동시에 수행하여 일시 중지 시간을 최소화하도록 설계되었습니다. 이렇게 하면 응용 프로그램이 메모리 사용량이 많은 경우에도 응답성을 유지하고 제대로 작동할 수 있습니다.
2. 높은 처리량: Shenandoah는 가비지 수집에 소요되는 시간을 최소화하여 높은 처리량을 제공하도록 설계되었습니다. 이렇게 하면 메모리 사용량이 많은 경우에도 애플리케이션이 계속해서 효율적으로 실행될 수 있습니다.
3. 대형 힙: Shenandoah는 대규모 힙을 효율적으로 처리하도록 설계되었으므로 대규모 메모리 할당이 필요한 애플리케이션에 적합합니다.
4. 일정한 할당: Shenandoah는 이를 효율적으로 처리할 수 있으므로 개체를 지속적으로 할당하고 사용하는 애플리케이션에 적합합니다.
5. 이전 객체: Shenandoah는 객체가 오래되고 새 객체를 생성하는 데 드는 오버헤드가 작은 애플리케이션에 적합합니다. 이를 효율적으로 처리할 수 있기 때문입니다.
6. 컨테이너 사용: Shenandoah는 컨테이너화된 환경에서 사용할 수 있지만 특정 사용 사례에 따라 다릅니다.
ZGC:
1. 낮은 대기 시간: ZGC는 대부분의 가비지 수집 작업을 애플리케이션과 동시에 수행하여 일시 중지 시간을 최소화하도록 설계되었습니다. 이렇게 하면 응용 프로그램이 메모리 사용량이 많은 경우에도 응답성을 유지하고 제대로 작동할 수 있습니다.
2. 높은 처리량: ZGC는 가비지 수집에 소요되는 시간을 최소화하여 높은 처리량을 제공하도록 설계되었습니다. 이렇게 하면 메모리 사용량이 많은 경우에도 애플리케이션이 계속해서 효율적으로 실행될 수 있습니다.
3. 대형 힙: ZGC는 대규모 힙을 효율적으로 처리하도록 설계되었으므로 대규모 메모리 할당이 필요한 애플리케이션에 적합합니다.
4. NUMA 인식: ZGC는 NUMA를 인식하도록 설계되었습니다. 즉, 대규모 힙과 여러 CPU 코어를 효율적으로 처리할 수 있습니다.
5. 실험적 기능: ZGC는 실험적 기능이며 활성화하려면 특정 명령줄 옵션이 필요합니다. 매우 짧은 일시 중지 시간이 필요하고 대규모 메모리 할당을 처리할 수 있는 애플리케이션에 적합합니다.
요약하면 Shenandoah와 ZGC는 모두 낮은 대기 시간과 높은 처리량을 제공하도록 설계되어 효율적인 메모리 관리가 필요한 애플리케이션에 적합합니다.
인용:[1] https://www.opsian.com/blog/aleksey-shipilev-shenandoah-concurrent-gcs/
[2] https://clojure-goes-fast.com/blog/shenandoah-in-production/
[3] https://wiki.openjdk.org/display/shenandoah/Main
[4] https://www.diva-portal.org/smash/get/diva2:1466940/FULLTEXT01.pdf
[5] https://developers.redhat.com/articles/2024/05/28/beginners-guide-shenandoah-garbage-collector