ZGC (Z Garbage Collector)는 Java Virtual Machine (JVM)에서 사용되는 최신의 가비지 컬렉터 중 하나로, 대규모 애플리케이션에서의 낮은 지연 시간과 높은 처리량을 목표로 설계되었습니다. ZGC는 Java 11에 처음 도입되었으며, 계속해서 개선되고 있습니다. ZGC의 주요 특징과 작동 방식을 상세히 설명드리겠습니다.
ZGC의 주요 특징
- 저지연(Garbage Collection Pause Time): ZGC는 가비지 컬렉션으로 인한 지연 시간을 매우 짧게 유지하는 것이 특징입니다. 일반적으로 수 밀리초 이내로 유지되며, 이는 대규모 애플리케이션에서 매우 중요한 성능 요소입니다.
- 대규모 힙 지원: ZGC는 테라바이트 단위의 대규모 힙 메모리까지 지원합니다. 이는 대용량 데이터를 처리하는 애플리케이션에서 매우 유용합니다.
- 컴팩션 지원: ZGC는 메모리 파편화를 방지하기 위해 메모리 컴팩션을 지원합니다. 컴팩션은 메모리를 재배치하여 더 큰 연속된 메모리 블록을 확보하는 과정입니다.
- Concurrent Processing: ZGC는 대부분의 가비지 컬렉션 작업을 애플리케이션 스레드와 동시에 수행합니다. 이는 애플리케이션의 성능 저하를 최소화합니다.
- Colored Pointers: ZGC는 colored pointers라는 독특한 기법을 사용하여 객체의 상태를 관리합니다. 이는 가비지 컬렉션의 효율성을 높이고 지연 시간을 줄이는 데 도움을 줍니다.
ZGC의 작동 원리
ZGC는 크게 다음과 같은 단계로 가비지 컬렉션을 수행합니다:
- Marking (마킹):
- Initial Mark (초기 마킹): 애플리케이션 스레드가 실행 중인 동안 루트 객체들을 마킹합니다.
- Concurrent Mark (동시 마킹): 애플리케이션 스레드와 병렬로 힙 전체를 스캔하여 객체들을 마킹합니다.
- Remark (재마킹): 최종 마킹 단계로, Concurrent Mark 단계 이후에 변경된 객체들을 다시 마킹합니다.
- Relocation (이동):
- Concurrent Relocate (동시 이동): 애플리케이션 스레드와 병렬로 살아있는 객체들을 새로운 메모리 영역으로 이동합니다.
- Cleanup (정리):
- 사용되지 않는 메모리 블록을 회수하여 새로운 객체가 할당될 수 있도록 합니다.
Colored Pointers
ZGC는 가비지 컬렉션 상태를 관리하기 위해 포인터에 색상을 추가하는 기법을 사용합니다. 각 객체 포인터는 64비트 주소 공간 중 일부 비트를 사용하여 객체의 상태를 나타냅니다. 이는 객체가 마킹되었는지, 이동 중인지 등을 나타내는 데 사용됩니다. 이러한 방식은 가비지 컬렉션 중 객체 참조의 유효성을 빠르게 판단할 수 있게 합니다.
장점과 단점
구분 | 내용 |
장점 |
|
단점 |
|
ZGC는 낮은 지연 시간이 중요한 대규모 애플리케이션에 적합하며, 최신 JVM 버전에서 사용할 수 있습니다. ZGC를 사용하려면 JVM 옵션으로 -XX:+UseZGC를 지정하여 활성화할 수 있습니다.
ZGC와 G1GC의 차이점
ZGC (Z Garbage Collector)와 G1GC (Garbage-First Garbage Collector)는 모두 Java Virtual Machine (JVM)에서 사용되는 가비지 컬렉터이지만, 설계 목표와 작동 방식에서 여러 차이가 있습니다. 두 가비지 컬렉터의 주요 차이점을 설명하겠습니다.
구분 | G1GC | ZGC |
주요 특징 |
|
|
작동 원리 |
|
|
주요 차이점
구분 | G1GC | ZGC |
지연 시간 | 사용자 정의 가능한 지연 시간 목표, 일반적으로 ZGC보다 길 수 있음 | 매우 낮은 지연 시간 (일반적으로 수 밀리초 이내) |
힙 구조 | 고정 크기의 영역 | 동적으로 크기가 결정되는 영역 |
가비지 컬렉션 방식 | 일부 동시 작업과 함께 Young 및 Mixed Collection 수행 | 대부분의 작업을 애플리케이션 스레드와 병렬로 수행 |
대규모 힙 지원 | 대적으로 작은 힙에서도 잘 동작하지만, 대규모 힙에서도 사용 가능 | 테라바이트 단위의 대규모 힙 지원 |
메모리 파편화 방지 | Region Evacuation을 통해 방지 | Colored Pointers와 동시 재배치를 통해 효율적으로 방지 |
적용 대상 | 지연 시간과 처리량 간의 균형이 필요한 애플리케이션에 적합 | 낮은 지연 시간이 중요한 대규모 애플리케이션에 적합 |
ZGC와 G1GC는 각각의 장단점이 있으며, 애플리케이션의 요구사항에 따라 선택되어야 합니다. ZGC는 낮은 지연 시간이 필요한 대규모 시스템에 매우 적합하며, G1GC는 다양한 크기의 힙에서 안정적으로 동작하며 지연 시간과 처리량 간의 균형을 맞추고자 할 때 유용합니다.
'JAVA' 카테고리의 다른 글
Zulu JDK: 무료로 장기 지원을 받을 수 있는 최고의 Java JDK (0) | 2024.08.21 |
---|---|
HikariCP Oracle 데이터베이스와의 커넥션 유효성을 검사 성능 최적화!! (0) | 2024.07.15 |
[테스트] JaCoCo란 무엇인가? (0) | 2024.07.15 |
[TDD] UnitTest(단위 테스트)란 무엇인가? (0) | 2024.07.15 |
[JAVA] Thread Local이란 무엇인가? 기본 개념부터 활용까지! (0) | 2024.06.05 |