G1 GC

2021. 10. 14. 17:52Java/Garbage Collection

G1 GC란

G1 GC는 대용량의 메모리가 있는 멀티 프로세서 시스템을 위해 제작되었습니다. 빠른 처리 속도를 달성하면서 pause의 최소화를 충족시키는 것이 G1 GC의 목표입니다. Heap은 동일한 크기의 영역으로 나뉘어 집합으로 분할되어 연속된 가상 메모리로 존재하게 됩니다.

G1 GC는 Heap Area를 일정 크기의 region으로 구분하여 논리적으로 구분하고 있습니다. 최초 객체가 생성되면 Eden에 할당하고 Survivor로의 이동과 소멸 그리고 Old Region으로의 이동 생명주기를 가집니다.

G1 GC의 수행 과정

Initial Mark

Old Region에 존재하는 객체들이 참조하는 Survivor Region을 찾습니다.

Root Region Scan

Initial Mark에서 발견한 Survivor 객체들에 대한 스캔 작업을 실시합니다.

Concurrent Mark

전체 Heap의 Scan 작업을 시작하고 GC 대상 객체가 발견되지 않은 Region은 이후 단계를 제외합니다.

Remark

애플리케이션을 멈추고 최종적으로 GC 대상에서 제외할 객체를 식별합니다.

Cleanup

애플리케이션을 멈추고 살아있는 객체가 가장 적을 Region에 대한 미사용 객체를 제거합니다.

Copy

GC 대상의 Region이었지만 Cleanup 과정에서 완전히 비워지지 않은 Region의 살아남은 객체들을 새로운 Region에 복사하여 Compaction을 수행합니다.

728x90

'Java > Garbage Collection' 카테고리의 다른 글

ZGC  (0) 2021.10.10
Shenandoah GC  (0) 2021.10.09
GC 모니터링  (0) 2021.08.13
GC 튜닝  (0) 2021.08.12