Garbage First (G1) 소개

더 읽 기
소개:
Garbage First (G1) 는 다 중 CPU 와 메모리 서버 에서 쓰레기 수집 에 소프트 실시 간 목표 (soft real - time goal) 와 높 은 스루풋 (high throughput) 을 제공 하 는 데 주력 하고 있다.JDK 6u 14 부터 Hotspot 에서 실험 을 했 지만 지금까지 DK7 은 실험실 을 나 가지 않 았 다.
#java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b05)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)

#java -server -XX:+PrintFlagsFinal | grep UseG1GC
bool UseG1GC                                   = false           {product}

 
region 에 대하 여:
G1 에서 힙 은 평균 적 으로 몇 개의 크기 가 같은 구역 (region) 으로 나 뉜 다.각 region 에는 관련 된 remembered set (RS) 가 있 습 니 다. RS 의 데이터 구 조 는 hash table 이 고 안의 데 이 터 는 card table (heap 에서 512 byte 마다 card table 1byte 에 매 핑 됩 니 다) 입 니 다.쉽게 말 하면 RS 에 존재 하 는 것 은 region 에 있 는 live objects 의 지침 이다.region 에서 데이터 가 변 했 을 때 먼저 card table 의 하나 이상 의 card 에 반영 되 고 RS 는 내부 의 card table 을 스 캔 하여 region 에서 메모리 사용 현황 과 생존 대상 을 알 수 있 습 니 다.
메모리 할당 에 대하 여:
G1 은 다 중 CPU 다 중 스 레 드 에 주목 하기 때문에 메모리 분 배 는 thread - local allocation buffers (TLABS) 기술 을 사용 합 니 다.모든 할당 스 레 드 는 대상 을 할당 하 는 데 사용 되 는 buffers 가 있 습 니 다. buffers 가 다 쓰 거나 부족 할 때 하나의 블록 을 다시 신청 하여 자신의 thread - local 에 저장 합 니 다.이러한 대상 의 메모리 분 배 는 개인 buffers 로 최소 화 되 어 동시 분배 메모리 의 압력 을 완화 시 켰 다.
region 이 채 워 지면 메모리 할당 스 레 드 는 새로운 region 을 다시 선택 합 니 다.빈 region 은 링크 된 list 에 구성 되 어 새로운 region 을 빠르게 찾 을 수 있 습 니 다.
대상 에 대한 분 배 는 TLABS 가 아 닌 TLABS 밖 에 있다.한 대상 의 크기 가 region 의 3/4 를 초과 할 때 이 대상 은 거대 한 것 으로 여 겨 진다.거대 한 대상 이 특수 한 지역 (heap regions) 에 분배 되 었 다.이 지역 에는 거대 한 대상 (humongous object) 만 포함 되 어 있 습 니 다.
실행 과정:
  • 초기 태그: 초기 마 킹
  • 동시 표기: Concurrent Marking
  • 최종 표기: 최종 마 킹
  • 계산 및 정리: 라 이브 데이터 계산 및 정리
  • G1 이 실행 하 는 첫 번 째 단 계 는 초기 태그 (Initial Marking) 이 며, 이 단 계 는 STW (Stop the World) 이 며, 모든 mutator threads 가 정지 되 어 GC Root 부터 직접 도달 할 수 있 는 대상 을 표시 합 니 다.그리고 모든 mutator threads 가 재 부팅 되 어 동시 태그 (Concurrent Marking) 단계 에 들 어 갑 니 다.이 단 계 는 GC Root 부터 heap 의 대상 을 표시 합 니 다. 스 레 드 와 응용 프로그램 스 레 드 를 병행 하 는 데 시간 이 오래 걸 립 니 다.동시 태그 가 완료 되면 최종 태그 (Final Marking) 단 계 를 시작 합 니 다.이 단 계 는 병렬 표기 단계 에서 변화 하 는 대상 을 표시 하 는 것 이다.마찬가지 로 최종 태그 도 STW 가 필요 하지만 여러 개의 태그 스 레 드 가 병행 되 어 곧 완 성 될 수 있 습 니 다.마지막 단 계 는 각 지역 (region) 의 회수 원가 와 가 치 를 정렬 하고 사용자 가 지정 한 정지 시간 에 따라 일부 지역 의 대상 을 선택적으로 수집 하고 각 지역 의 대상 의 수량 을 통계 합 니 다.
    CMS 와 비교:
    전체적으로 말 하면 G1 은 CMS 와 마찬가지 로 지연 시간 이 낮은 수집 기로 서 마찬가지 로 물동량 을 희생 했 지만 양자 간 에 좋 은 평 가 를 받 았 다.
    G1 은 CMS 와 비교 해 보면 다르다.
    1. 세대 구분: CMS 에서 더 미 는 PermGen, YoungGen, OldGen 으로 나 뉜 다.영 젠 은 또 두 개의 survo 구역 으로 나 뉘 었 다.G1 에 서 는 더미 가 여러 구역 (region) 으로 골 고루 나 뉘 어 져 있 고, 각 구역 에서 도 신 · 구세대 라 는 개념 은 유지 되 지만 수집 기 는 전 구역 단위 로 수집 된다.
    2. 알고리즘: CMS 의 '태그 - 청소' 알고리즘 에 비해 G1 은 압축 알고리즘 을 사용 하여 불필요 한 조각 이 생기 지 않도록 합 니 다.수집 단계 에 서 는 G1 이 특정 구역 에서 살아 남 은 대상 을 다른 구역 으로 복사 한 후 전체 구역 을 회수 합 니 다.
    3. 정지 시간 제어 가능: 정지 시간 을 단축 하기 위해 G1 은 정지 모델 을 미리 저장 할 수 있 습 니 다. 이렇게 하면 사용자 가 설정 한 정지 시간 범위 내 에서 G1 은 적당 한 구역 을 선택 하여 수집 하여 정지 시간 이 사용자 가 지정 한 시간 을 초과 하지 않도록 합 니 다.
     
     
    참고 자료: 첨부 참조
     
  • Garbage-first_garbage_collection.pdf (194.5 KB)
  • 다운로드 횟수: 48
  • 좋은 웹페이지 즐겨찾기