GC Algorithm
Parallel CG
Java 8에서 default GC로 적용
minor collection을
병렬
로 수행한다GC의 오버헤드를 현저하게 줄일 수 있다
multi processor나 multi thread hardware 에서 돌아가는
중대형 규모의 데이터셋
을 다루는 어플리케이션을 위한 GCParallel Compaction
Parallel Collector가 major collection을
병렬
로 수행하게 해주는 기능-XX:+UseParallelGC
옵션을 지정하면 Parallel Compaction이 디폴트로 사용된다
but, multi thread를 사용한 collection 사용이
Young
영역에 국한된다Young Generation Collection 알고리즘:
Parallel Scavenge
Old Generation Collection 알고리즘:
Serial Mark-Sweep-Compact
G1 (Garbage First Collector)
Java 11에서 default GC로 적용
큰 메모리를 가진 멀티 프로세서 머신을 위한 Collector
-XX:+UseG1GC
옵션으로 G1 Collector를 켤 수 있다G1 GC만 Generational GC가 아니라는 점에 주의해야한다
G1 collector는 Young 영역과 Old 영역으로 나누지 않는 방식을 사용하는 특이한 collector이다
G1은 물리적 generation 구분을 없애고, 전체 heap을 1MB 단위의 region들로 다룬다
바둑판 모양
으로 구성되어 있으며,약 2000개
의 구역을 사용한다
G1 이라는 이름은 garbage로 가득찬 region부터 컬렉션을 시작한다는 의미이다
Garbage로 꽉 찬 region이 발견되면 바로 collector를 돌린다.
Old region의 살아있는 객체는 다른 Old region으로 옮겨지며, compaction이 이뤄진다
G1에서 Young, Old 영역 개념은
고정된 개념
이 아니다객체가
새로 할당
되는 region들의 집합이Young
generation 이다프로모션
이 일어나는 region의 집합이Old
Generation 이다
ZGC
Java 17에서 default GC로 적용
ZGC는 8MB에서 16TB 크기의 heap을 처리할 수 있는 확장 가능한 low-latency GC이며 -XX:+UseZGC
option을 사용하여 활성화 할 수 있다
Low-latency
ZGC는 memory collection을 위해 일시 중단을 최소화하여 응답성을 높인다
collection 작업을 수행하는 동안 application thread는 계속 실행되는 concurrent GC이며, 중단 시간은 매우 짧다
이로 인해 대규모 memory 환경에서도 높은 응답성을 유지할 수 있다
최대 지연 시간은 1밀리초 미만이다
매우 큰 Heap 지원
ZGC는 수 16TB에 달하는 큰 heap을 처리할 수 있다
이로 인해 대규모 데이터 처리나 memory 집약적인 작업을 수행하는 application에 사용하기 좋다
불연속적인 수집
ZGC는 전체 heap을 한 번에 수집하는 대신, 작은 region 단위로 분할하여 garbage collection을 수행한다
수집 작업의 일부만을 처리하므로 일시 중단 시간을 분산시킬 수 있다
병렬 처리
ZGC는 multi-thread를 활용하여 GC 작업을 병렬로 처리한다
이를 통해 GC 작업을 효율적으로 분산시키고, 전체 collection 시간을 단축한다
효율성
collection 중에 힙을 정리할 필요가 없기 때문에 효율적이다
일반적인 GC는 memory collection 작업을 수행하기 위해
stop-the-world
를 발생시킨다이때, application thread들이 모두 일시 중단되어 GC 작업이 이루어진다
이러한 중지 시간은 application 응답성과 성능에 영향을 줄 수 있다
반면 ZGC는 heap을 정리하는 과정에서 중지 시간을 매우 짧게 유지한다
ZGC는 collection 작업 중에도 application thread를 계속 실행시키며, 필요한 경우에만 매우 짧은 중지 시간을 발생시킨다
ZGC는 일시 중단 시간을 최소화하여 application 응답성을 높이는데 중점을 준다
Last updated