저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다
- JDK 7 ~ JDK 11 내의 GC 기술
- 고성능 / 저지연 컬렉터들과 구분됨
1. 구세대
시리얼 올드 컬렉터
- 가장 기초적이고 오래된 컬렉터
- Mark-Compact 알고리즘
- 단일 스레드
- 메모리 사용량이 적음
- 멀티코어 시스템에서 성능이 저하됨
매개변수
- -XX: +UseSerialGC: 시리얼 올드 컬렉터와 신세대 시리얼 컬렉터가 모두 활성화됨
CMS 컬렉터
- 동시성을 지원하는 최초의 컬렉터
- GC 스레드와 사용자 스레드가 동시에 실행됨
- 일시 정지 시간을 최소로 줄이는데 집중
- 구세대가 68% 이상 차면 동작함
Mark-Sweep 알고리즘
- 최초 표시 (Stop-The-World): GC 루트에서 직접 참조되는 객체 표시
- 동시 표시: GC 루트에서 도달 가능한 모든 객체를 추적하고 마킹
- 재표시 (Stop-The-World): 사용자 스레드가 참조 관계를 변경한 객체들을 다시 확인 및 갱신
- 동시 쓸기: 마킹되지 않은 객체를 회수
매개변수
- -XX: UseConcMarkSweepGC: CMS 활성화
- -XX: CMSInitiatingOccupancyFraction: CMS 가동 조건 (구세대 메모리 점유율)
- -XX: UseCMSCompactAtFullCollection: GC 수행 후, 조각 모음 수행
- -XX: CMSFullGCsBeforeCompaction: 해당 횟수 이상 Full GC 수행 시, 조각 모음 수행
패러렐 올드 컬렉터
- PS 컬렉터의 구세대용 버전
- 멀티스레드 (병렬 처리)
- Mark-Compact 알고리즘
- 처리량에 집중한 GC
매개변수
- -XX: +UseParallelGC: 신세대 PS 컬렉터와 함께 사용
2. 신세대
파뉴 컬렉터
- 시리얼 컬렉터를 병렬화한 버전 (멀티스레딩 환경)
- 병렬화 이외에 완전히 같음
- CMS 컬렉터와 조합할 수 있음
매개변수
- -XX: +UseParNewGC: 파뉴 활성화
패러렐 스캐빈지 컬렉터 (PS 컬렉터)
- 멀티 스레드 환경 (병렬 처리)
- 처리량 제어에 집중
- 가비지 컬렉터 소비 시간을 줄이기
- Mark-Copy 알고리즘
- 자원을 효율적으로 사용
- 상호 작용할 일이 많지 않은 프로그램에 알맞음
매개 변수
- -XX: MaxGCPauseMillis: GC 정지 시간의 최댓값 (작을수록 신세대 메모리 량과 처리량이 줄어듬)
- -XX: GCTimeRatio: GC 처리량
- -XX: +UseAdaptiveSizePolicy: 힙의 메모리 크기를 최적의 사이즈로 조율함
3. 전체 세대
G1 컬렉터
- JDK 8
전체 세대를 리전별로
- 특정 영역만 회수 가능
- 메모리 단편화 방지
리전간 참조 문제
- RSet과 Write Barrier로 해결
거대 리전
- 특정 크기 이상의 객체를 관리하는 영역
- 리전 크기의 절반 이상
- 일반적인 GC 작업과 독립적으로 관리됨
- 단편화 문제를 줄임
정지 시간 예측 모델
- 설정된 시간까지만 정지 시간을 통제
부분 회수
- 각 리전의 가비지 비율을 계산하여, 가비지가 많은 영역부터 회수 수행
- 신세대와 구세대를 함께 처리
- 신뢰성 확보 목적
- 자원을 효율적으로 사용
SATB (Snapshot-at-the-Beginning)
- 사용자 스레드가 일시정지하지 않고 동시 표시하는 방법
- 동시 표시 수행 시, 현재 객체 그래프의 스냅샷을 생성
- 사용자 스레드가 객체를 변경하면 스냅샷에 갱신
- GC 스레드는 스냅샷으로 살아있는 객체를 추적
매개 변수
- -XX: G1HeapRegionSize: 리전 크기
- -XX: MaxGCPauseMillis: GC의 최대 정지 시간
- -XX: InitiatingHeapOccupancyPercent: 힙의 사용량이 해당 값 초과 시 GC 작업 수행
'Java' 카테고리의 다른 글
[JVM 밑바닥까지 파헤치기] 6-1. 클래스 파일 구조: 클래스 파일 (0) | 2024.12.22 |
---|---|
[JVM 밑바닥까지 파헤치기] 3-5. 가비지 컬렉터와 메모리 할당 전략: 저지연 가비지 컬렉터 (0) | 2024.12.21 |
[JVM 밑바닥까지 파헤치기] 3-3. 가비지 컬렉터와 메모리 할당 전략: 구현 (1) | 2024.12.21 |
[JVM 밑바닥까지 파헤치기] 3-2. 가비지 컬렉터와 메모리 할당 전략: 가비지 컬렉션 (0) | 2024.12.21 |
[JVM 밑바닥까지 파헤치기] 3-1. 가비지 컬렉터와 메모리 할당 전략: 회수 (1) | 2024.12.19 |