G1GC(Garbage First Garbage Collecto)
- S : survivor 영역
- E : Eden 영역
- O : old 영역
- H : 한 영역보다 크기가 커서 여러 영역을 차지하고있는 커다란 객체(Humongous Object)
일시 정지 시간을 줄이기 위해 병렬로 GC 작업을 한다. 각각의 스레드가 자신만의 영역을 잡고 작업하는 방식
기본 GC들과 다르게 물리적으로 Young영역과 Old영역을 구분하지 않는다.
G1GC는 전체 heap을 체스판처럼 여러 영역(region)으로 나누어 관리한다.
- 비어 있는 영역에만 새로운 객체가 들어간다
- 쓰레기가 쌓여 꽉 찬 영역을 우선적으로 청소
- 꽉 찬 영역에서 라이브 객체를 다른 영역으로 옮기고 꽉 찬 영역은 깨끗하게 비운다.
G1GC의 마킹
- G1GC는 SATB(Sanpshot-At-The-Beginning)알고리즘을 사용하여 마킹한다.
- SATB는 일시 정지가 일어난 시점 직후의 라이브 객체에만 마킹을 하는데 마킹하는 도중에 죽은 객체도 라이브 객체로 간주하는 보수적인 특징이 있다. 비효율적일 것 같지만 Remark 단계의 응답 시간이 다른 GC에 비해 빠른 경향이 있다.
Humongous Object