JVM의 가비지 컬렉션 알고리즘 [세]

이 문서는 객체가 어떻게 재활용 쓰레기에이 가비지 수집기 정리해 재활용 될 수있는 메모리를 요약 한 것이다.

다음과 같이 효율적인 JVM 쓰레기를 들어, 가비지 컬렉션 알고리즘이 요약되어 있습니다 :

첫째, 마크 - 스윕 알고리즘

그림 삽입 설명 여기
클리어 라벨링 알고리즘을 기반으로 가비지 컬렉션 알고리즘, 간단하지만우주 쓰레기의 심각한 문제가 될 것입니다. 위가,이 때 경우에하는 것은 3M 크기의 개체를 만들 수 있지만> = 3M 연속 메모리 공간을, GC가 발생합니다.

둘째, 복제 알고리즘

그림 삽입 설명 여기
알고리즘은 알고리즘 갤 플래그를 기반으로, 제 1 메모리 영역은 사용 중 하나는 두 개의 부분으로 나누었다. 때 완료되면 메모리 사용량이 다른 복사 객체를 살고, 다음이 하나를 비울 것이다 중 하나입니다. 따라서, 전체의 절반 영역 메모리 불러올 때마다, 순차적으로, 단순한 효율적인 작동에 할당 된 스택 포인터 이동의 상단만큼 등 메모리 단편화의 복잡성을 고려하지 않는다. 이 알고리즘은 우주 쓰레기 마크 스윕 알고리즘 메모리의 문제를 해결하지만, 메모리 사용량은 50 %입니다.

8로 1 개 메모리 공간이 구분되어 있지만, 구분 : : 현재 주류 상업 가상 머신은 그래서 1, 오브젝트의 98 %의 새로운 세대는 "죽음에 대한 원시 저녁"인 새로운 세대를 복구하기 위해 복제 알고리즘을 기반으로하지 않습니다 1 : 에덴 영역과 두 개의 작은 영역들 각각은 서바이버 에덴 영역과 사용 영역을 상기 서바이버 1. 마이너 GC 생존 생존자 영역을 저장하기에 충분한 공간의 다른 부분에서 어떤 오브젝트가이 시간에 다시 좋은 신용 및 지불과 같은 (할당 보장 메커니즘을 통해 직접 돈을 객체 없으면 모든 시간은 확보하지의 경우 사람들은 여기에 이전 시대에) 이전 보증인에 해당합니다.

셋째, 마크 - 정렬 알고리즘

그림 삽입 설명 여기
첫 번째 라이브 객체가 한쪽으로 명확 이동 한 다음 쓰레기 객체를 취소 직전으로 정렬 알고리즘 마크 마크 마크 및 청소 알고리즘 과정. 알고리즘 해결할 수있는 문제는 태그의 문제는 알고리즘 메모리 공간 파편 문제 알고리즘 및 복사 공간 활용을 낮게 구성 할 수 있습니다. 효율이 매우 낮은 그래서 그러나, 알고리즘의 요구는 마무리 공정의 모든 살아있는 객체의 메모리 주소를 구성합니다.

넷째, 세대 수집 알고리즘

세대 컬렉션 알고리즘은 실제로 특정 상황에서, 상기 세 개의 알고리즘의 조합이다. 이 메모리 영역은 이전과로 나누어 힙되어 해당의 오래된 마크 사용, 복제 알고리즘의 새로운 세대를 사용하는 새로운 세대의 - 스윕이나 마크 - 정렬 알고리즘을.

메모리 모델 :

그림 삽입 설명 여기
(1)의 이전 및 새 세대의 기본 크기 비율 : 2, 에덴 S0와 S1 및 비율이 8 : 1 : 1, 매개 변수를 수정할 수 있습니다.
그림 삽입 설명 여기

행동의 생존자 지역은 모든 마이너 GC, 에덴 개체가 오래된 년이 곧 채워집니다 이전 년으로 이동합니다 생존 할이 부분 경우, 버퍼의 역할을하는 것입니다.

올드 영역 전체 GC가 발생했을 때 긴 STW 발생 (- 더 - 정지 세계), 오래된 지구, 더 많은 메모리 더 긴 시간이 소요되는 오래된 메모리가 더 큰되지 않도록. 정렬 알고리즘 - 복제 알고리즘, 그것은 공간의 낭비 인 경우 마크의 사용은 그래서 더 메모리 영역 올드 보증 정책이 없기 때문에 오래된 지구 '세 바보 객체'의 큰 숫자를 가지고, 쉽게, OOM로 이어질 수 있습니다.

개체 할당 프로세스 :
사실, 대부분이 메모리에 죽음으로 생 저녁 객체이며, 생존 시간은 매우 짧습니다. 새로운 개체는 일반적으로 메모리 공간 에덴 영역을 할당합니다 에덴 지구 메모리 공간 부족 경우, JVM은 마이너 GC, 에덴의 영역을 수행하고 S0 또는 지역 이동 살아있는 객체의 웠음, 에덴 지역 및 S0 또는 S1을 비우 S1 것 생성 그 지역의 S0 또는 S1 유휴 상태로, 라이브 오브젝트 위로 이동 시대 + 1의 영역 (때문에 할당 보장 메커니즘)을 보내 줄 수없고, 이동 객체는 15 세의 나이 기본값을했다. 이전 년에 맞지 않으면 에덴 후 여전히 큰 개체, 개체가 이전 시대에 직접 것을 나타내는 개체를 맞는 경우, JVM은 전체 GC 될 것입니다, 다음 가게는 더 적은, OOM이 발생, 그것은 아래에 저장되어 있지 않은 경우 입금.
도 :()는 네트워크에서 이하
그림 삽입 설명 여기

이전 연도를 입력합니다 세 가지 목적이 있습니다 :

대형 오브젝트
큰 개체가 개체에 대한 참조는 연속 된 메모리 공간을 많이 필요로한다. -XX는 : PretenureSizeThreshold 객체의 크기가 크기보다 더 큰 물체의 크기를 설정할 수 있으며, 이것은 두 개의 직렬 및 ParNew 수집에만 작은 파라미터이다.

장기 생존 대상
가상 머신을 정의 (제목 헤더) 각 개체 (나이) 카운터의 대상 연령. 객체가 정상적인 상황에서 시작 및 끝 생존자 지역 이동 사이의 영역에 계속해서, 각 영역의 경험에서 개체 생존자 마이너 GC는 1 년 오래 된, 연령 증가했다. 15 세에 나이가 증가함에 따라,이 시간은 이전 시대로 전송됩니다. 나이는 JVM 매개 변수 -XX 수 있습니다 MaxTenuringThreshold입니다을 설정합니다.

나이 동적 객체
가상 머신 (세 포함) 공간 생존자 특정 연령 이하 오브젝트 생존자 공간의 큰 절반 이상 전체 크기 인 경우, 이전의 영역을 넣어 것, 객체가 세 15 세이어야 다음 세 이상을 요구하거나 동일하지 않습니다 당신이 노인 영역에 직접 갈 수있는 대상 연령은, 동적 메커니즘은 마이너 GC 세 이후 트리거.

게시 11 개 원래 기사 · 원의 칭찬 0 · 조회수 (614)

추천

출처blog.csdn.net/fei1234456/article/details/104736912