⭐ Programming/Backend

ZGC: Z Garbage Collector

김 진 하 2025. 7. 10. 22:14

ZGC란?

: JVM 에서 사용하는 최신 GC 중 하나로, Java 11에서 처음 도입 + JDK 15부터 환경 적용

 

주요 특징

초저지연(Very Low Latency)

  • GC로 인한 애플리케이션 정지 시간(Stop-The-World pause)을 1~10ms 미만으로 굉장히 짧게 유지

대용량 힙 지원

  • 테라바이트 단위의 대규모 힙 메모리도 효율적으로 관리할 수 있음

Auto-tuning

  • 복잡한 GC 파라미터를 자동으로 최적화해 개발자가 별도 튜닝 없이도 안정적인 성능을 얻을 수 있음

메모리 Compaction 동시 지원

  • 메모리 단편화를 방지하기 위해 객체를 이동

동시/병렬 처리(Concurrent/Parallel)

    • 여러 스레드가 병렬로 처리하며, 거의 모든 GC 단계를 애플리케이션 스레드와 동시에 수행

Colored Pointers

  • 객체 포인터의 비트에 객체의 GC 상태를 저장하여 관리
  • 객체 참조의 유효성을 빠르게 판단할 수 있고, GC 작업 중에도 객체를 안전하게 이동하거나 관리할 수 있음

Region(영역) 기반 동적 메모리 관리

  • 힙을 다양한 크기의 Region으로 나눠 관리하고, 세대 구분 없이 객체 크기에 따라 동적으로 메모리를 할당함

 

동작 방식(Cycle)

  1. Marking: 힙 메모리 내 객체 중 살아있는 객체를 식별하고 표시하는 작업
    1. Initial Mark: GC Root에서 직접 참조하는 객체 마킹 -> STW(Stop-The-World)
    2. Concurrent Mark: 어플리케이션 스레드와 동시에 힙 전체를 스캔하며 live 객체를 마킹
    3. Remark: 동시 마킹 중에 변경된 객체(새로 참조된 객체 포함)를 재마킹 -> STW
  2. Relocation
    1. Concurrent Relocate: live 객체를 new 메모리 영역으로 이동시킴(어플리케이션과 동시 수행)
  3. Remapping: 이동한 객체의 참조를 새 주소로 업데이트(동시 수행)
  4. Reclaim(정리): 더 이상 사용하지 않는 메모리 블록 회수, 새로운 객체가 할당될 수 있게 함

 

STW(Stop-The-World)

JVM에서 가비지 컬렉션(GC) 작업을 수행하기 위해, GC 스레드 제외 모든 애플리케이션 스레드의 실행을 일시 중지시키는 현상 -> ZGC Pause Time