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)
- Marking: 힙 메모리 내 객체 중 살아있는 객체를 식별하고 표시하는 작업
- Initial Mark: GC Root에서 직접 참조하는 객체 마킹 -> STW(Stop-The-World)
- Concurrent Mark: 어플리케이션 스레드와 동시에 힙 전체를 스캔하며 live 객체를 마킹
- Remark: 동시 마킹 중에 변경된 객체(새로 참조된 객체 포함)를 재마킹 -> STW
- Relocation
- Concurrent Relocate: live 객체를 new 메모리 영역으로 이동시킴(어플리케이션과 동시 수행)
- Remapping: 이동한 객체의 참조를 새 주소로 업데이트(동시 수행)
- Reclaim(정리): 더 이상 사용하지 않는 메모리 블록 회수, 새로운 객체가 할당될 수 있게 함
STW(Stop-The-World)
JVM에서 가비지 컬렉션(GC) 작업을 수행하기 위해, GC 스레드 제외 모든 애플리케이션 스레드의 실행을 일시 중지시키는 현상 -> ZGC Pause Time
'⭐ Programming > Backend' 카테고리의 다른 글
| ThreadPool TaskExecutor와 Async TaskExecutor (0) | 2025.06.18 |
|---|---|
| Stream(collect, filter, map) (0) | 2023.07.12 |
| property 우선 순위 (feat. application.properties) (0) | 2023.05.08 |
| 쿼츠 스케줄러 (0) | 2023.05.08 |
| HikariCP - DB ConnectionPool (1) | 2023.05.08 |