G1 GC
- Garbage First GC
- Garbage만 있는 Region을 먼저 회수하기 때문에 Garbage First라고 한다.
- Java 9 이상 부터 G1 GC를 기본 실행 방식으로 사용한다.
- CMS GC의 메모리 단편화 문제를 해결한다.
- Stop The World 시간을 최소화 한다..
Minor GC
- Young Generation Region에서 발생하는 GC
- Live Object를 Survivor Region 또는 OldRegion으로 이동
- age 증가 발생
- Stop The World 발생
Major GC
- Initial Mark
- Stop The World 발생
- Old Region에 존재하는 객체들이 참조하는 Survivor Region을 찾는다.
- Root Region Scan
- Initial Mark에서 찾은 Survivor Region에 대한 GC 대상을 식별한다.
- Concurrent Mark
- 전체 힙 Region에 대해 스캔 작업을 진행하며 GC 대상 객체가 발견되지 않은 Region은 이후 단계를 처리하는데 제외된다.
- Remark
- Stop the World 발생
- 최종적으로 GC 대상에서 제외될 객체를 식별한다.
- 모든 객체가 Garbage라고 판단된 Region을 제거하고 반환한다.
- SATB 기법을 사용
- Stop The World 이후 살아있는 객체만 마킹
- 다른 GC에 비해 Remark 단계 응답 시간이 더 빠르다
- Clean UP
- Stop the World 발생
- 살아있는 객체가 가장 적은 Region 에 대한 GC 대상을 제거한다.
- 빈 Region은 Available Region으로 변경한다.
- Copy
- GC 대상 Region이었지만 Cleanup 과정에서 완전히 비워지지 않은 Region의 살아남은 객체들을 새로운(Available/Unused) Region 에 복사하여 Compaction 작업을 수행한다.
G1 GC 참고1
G1 GC 참고2