2016년 12월 6일 화요일

G1 GC

G1 GC는 Generational GC의 단점을 보완한다!

-> CMS GC를 대체하기 위한 Low-Pause & Concurrent Garbage Collector 임.
-> Stop-The-World에 의한 Pause Time을 예측할 수 있음(Soft Real-Time)
-> Compaction을 동반하므로, Fragmentation을 줄일 수 있음
-> 세대별(Generational)로 객체를 관리하며 Parallel/Concurrent 수행방식은 기존의 Collector아 비슷하나, Young영역과 Old영역의 구분을 특정하지 않는 일정한 크기의 Region으로 관리됨

주요 point :
*예측
*Compaction

- - - - - - - - - -
단계 :

Evacuation Pause : Minor GC와 동일한 작업으로, Young 영역을 G 한다. (STW 발생)
Concurrent Cycle : Old 영역을 GC하기 위한 사전 단계로, live 객체를 Marking 한다.
Mixed GC : Old 영역에 대한 GC를 마무리하는 단계로, Young 영역과 Old 영역을 동시에 GC한다.


- - - - - - - - - -
Evacuation Pause
 - 대부분의 단계가 Parallel로 수행
 - STW 발생

Ext Root Scanning : 각 GC Thread들이 Global, Register, Thread stack 등에서 root 노드 검색
Update RS : Remembered Set* 정보를 갱신
Scan RS : 업데이트 된 remembered Set 정보를 기반으로 Reference를 가진 객체들를 탐색
Object Copy : Scan RS에서 탐색한 객체들을 다른 Region으로 복사. Eden -> Survivor , Survivior -> Old
Termination : 종료 Thread가 다른 Thread 들의..

*용어설명
*Remembered Set : 해당 Region내의 각체로 Refernece하는 객체들의 목록
*Collection Set : GC시 수집될 Region들의 목록

- - - - - - - - - -
Concurrent Cycle
 - IHOP에서 지정한 수치가 넘어가면 Trigger됨.
 - initial-mark 이후 수행됨 (initial-mark는 Young GC시 함께 수행)

Root Region Scan
Concurrent mark
Remark
Cleanup : Region 내 살아있는 객체 정보를 갱신하고, Empty region을 식별(STW 발생)
Concurrent Cleanup : Empty Region을 Reset하고, 미사용 영역에 추가함(Empty Region이 없으면 Skip)

*용어설명
*IHOP(InitiatingHeapOccupancyPercent) : Heap이 일정 비율만큼 차지하면 Marking을 수행하도록 하는 옵션. 기본값은 45(%)

- - - - - - - - - -
Mixed GC
 - Evacuation Pause(Young GC)와 동일
 - Young 영역과 Old 영역이 동시에 수집됨
 - 여러 번으로 나누어 수행됨
 - STW 발생
(살아있는 객체가 적은 Young/Old 영역들이 GC 및 Compaction의 대상이 됨(GC 목표시간/빈도 반영)

Ext Root Scanning
Update RS
Scan RS
Object Copy
Termination

- - - - - - - - - -
G1 GC를 요약하면 다음과 같다 !
 - JAVA 1.7부터 정식 지원
 - 여러개의 영역(Region)으로 나누어 관리되며, 각 영역의 역할(Eden/Young/Old)은 쉽게 변경이 가능
 - MinorGC는 Evacuation Pause로 수행, MajorGC는 최대한 Application과 동시에 수행할 수 있도록 Concurrent Cycle과 Mixed GC(Evacuation Pause)로 구부하여 수행됨
 - 각 Region에는 살아있는 객체 정보를 가지고 있으며, 이것을 바탕으로 먼저 Garbage 되어야 하는 Region을 결정
 - GC 수행 시 Compaction을 수행함으로 인해 Fragmentation을 줄여 연속된 메모리 할당에 효율적
 - 객체 크기가 Region의 1/2보다 큰 경우, humongous 영역으로 관리

장점 !
 - 상대적으로 GC 성능 우수
 - 수행시간 예측 가능, STW 지속시간을 줄일 수 있음
 - FullGC 지속시간 및 빈도를 줄일 수 있음

- - - - - - - - - -


댓글 없음:

댓글 쓰기