G1 GC란?

G1 GC

  • 대용량 힙에서 뛰어난 성능을 유지한다.
  • Java9부터 기본 가비지 컬렉터로 사용되고 있다.

특징

  • 세대별 컬렉션: 젊은 세대와 노년 세대의 메모리를 다르게 관리한다. 젊은 세대에서 객체가 생존하면 노년 세대로 이동한다.
  • 영역 기반 힙: 힙을 여러 개의 동일한 크기의 영역으로 나눈다. 각 영역은 젊은 세대, 노년 세대, 또는 빈 영역으로 구분된다.
  • Garbage First: 가장 많은 가비지를 포함하고 있는 영역부터 수집을 시작한다.

동작 방식

  • 초기 마크: 루트 집합1을 마킹하고 생존 가능한 객체를 추적한다. 젊은 세대의 가비지 컬렉션과 함께 실행된다.
  • 루트 지역 스캔: 초기 마크 단계에서 식별된 루트 집합을 스캔해서 참조되는 객체가 있는 영역을 식별한다.
  • 병렬 마크: 전체 힙에 걸쳐 참조되는 객체를 식별한다.
  • 재마크: 병렬 마크 단계에서 놓친 변경사항을 처리한다.
  • 정리: 가비지가 많은 영역을 식별하고, 필요에 따라 이 영역을 회수한다. 이 단계는 일부 작업을 애플리케이션과 동시에 수행할 수 있다.
  • 복사/재배치: 필요한 경우, 객체를 더 효율적으로 사용할 수 있는 영역으로 복사하고 메모리를 압축한다.

1루트 집합: 전역 변수와 스택 프레임에서 참조되는 객체 등 프로그램이 직접 접근할 수 있는 변수.