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) 만 포함 되 어 있 습 니 다.
실행 과정:
CMS 와 비교:
전체적으로 말 하면 G1 은 CMS 와 마찬가지 로 지연 시간 이 낮은 수집 기로 서 마찬가지 로 물동량 을 희생 했 지만 양자 간 에 좋 은 평 가 를 받 았 다.
G1 은 CMS 와 비교 해 보면 다르다.
1. 세대 구분: CMS 에서 더 미 는 PermGen, YoungGen, OldGen 으로 나 뉜 다.영 젠 은 또 두 개의 survo 구역 으로 나 뉘 었 다.G1 에 서 는 더미 가 여러 구역 (region) 으로 골 고루 나 뉘 어 져 있 고, 각 구역 에서 도 신 · 구세대 라 는 개념 은 유지 되 지만 수집 기 는 전 구역 단위 로 수집 된다.
2. 알고리즘: CMS 의 '태그 - 청소' 알고리즘 에 비해 G1 은 압축 알고리즘 을 사용 하여 불필요 한 조각 이 생기 지 않도록 합 니 다.수집 단계 에 서 는 G1 이 특정 구역 에서 살아 남 은 대상 을 다른 구역 으로 복사 한 후 전체 구역 을 회수 합 니 다.
3. 정지 시간 제어 가능: 정지 시간 을 단축 하기 위해 G1 은 정지 모델 을 미리 저장 할 수 있 습 니 다. 이렇게 하면 사용자 가 설정 한 정지 시간 범위 내 에서 G1 은 적당 한 구역 을 선택 하여 수집 하여 정지 시간 이 사용자 가 지정 한 시간 을 초과 하지 않도록 합 니 다.
참고 자료: 첨부 참조
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 문자열 풀우리는 Java에서 문자열이 힙 메모리 영역에 저장된다는 것을 알고 있습니다. 이 힙 메모리 내부에는 String Pool이라는 특정 메모리 영역이 있습니다. 문자열 프리미티브를 생성하면 자바 문자열의 불변성 덕분에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.