심층 JVM의 이해 : 가비지 컬렉션

첫째, 학습 가비지 컬렉션 필요성

이 시스템이 더 높은 동시성에 도달하면 가비지 콜렉션이 병목 될 때 메모리 오버 플로우의 다양한 문제를 해결해야하는 경우, 우리는 이러한 "자동화"기술의 필요한 모니터링 및 규제를 구현해야합니다.

두, JVM의 메모리 할당 및 복구

가비지 콜렉션은 가상 머신의 주로 힙 메모리입니다. 다음과 같이 스택도이다 :

새로운 세대 영역에 속한다 ( "에서"), S0에 보이는 에덴 지역 지역 (S1) ( "받는 사람")는 tentired 지역은 세 속한다.

가비지 컬렉션의 두 종류

  • 새로운 세대 GC (마이너 GC는) : 복구 속도는 일반적으로 빠른, 매우 자주 마이너 GC에서 발생하는 쓰레기 수집 활동의 새로운 세대를 의미합니다.
  • 이전의 GC (주요 GC / 전체 GC가) : 자주 (절대하지 않음) 마이너 GC 중 적어도 하나와 함께 주요 GC에 출연 GC 나이에 장소를 의미, 주요 GC의 속도는 일반적으로 느린보다 10 배의 마이너 GC보다 .

개체에 대한 메모리를 할당

에덴 지역은, S0는 ( "에서") 새로운 세대 영역에 속하는 지역 (S1) ( "받는 사람"), tentired 지역은 오래된 년 속해 위

대부분의 경우, 첫 번째 목적은 상술 에덴 메모리 할당 될 것이다. 시간에 대한 충분한 공간이없는 경우. 먼저 마이너 GC를 수행 할 것, (S1)를 입력 라이브 객체가있을 경우 GC는 일반적으로 ( "에서") 에덴 및 S0에서 발생하고, 대상의 연령은 1 (에덴 지구를 추가합니다 -> 생존자 지역 대상 후 초기 시대 어느 정도의 연령 (기본값은 15 세이다), 이전 시대로 승격 될 것 1)이된다. 이 GC, 에덴 및 S0 영역이 비워진 후, 다음, 나이는 1 + 수 있도록, 마이너 GC는이 과정을 반복합니다, 아직 살아 있다면 살아있는 객체는 다음 마이너 GC를 경험하게 될 것입니다, S1 및 S0 교환 은 "을"영역이 채워질 때까지,이 지역이 가득 "에"모든 개체가 이전 시대로 이동합니다 후.

일반적인 힙 메모리 할당 전략

(1) 이전의 연도를 입력한다 (2) 큰 객체 바로 이전 해 (3)에 에덴 영역에서 물체의 장기 생존율을 우선 목표 할당

동적 오브젝트의 연령 판단

같은 나이의 합 생존자 공간이 공간 생존자의 개체 모두의 절반 이상 크기보다 나이 큰 경우 더 나은 다른 상황에 프로그램 메모리에 적응하기 위해, 가상 머신은 항상 대상 연령은 이전 시대를 입력하기 위해 특정 값에 도달해야 필요하지 않습니다거나 같음 직접 살 갈 수있는 나이는 객체, 필요성은 연령 요건에 도달하지.

셋째, 개체는 이미 죽은입니까?

도달 가능성 분석

기본적인 아이디어라는 알고리즘의 일련의 것입니다  "GC의 뿌리"  시작 지점으로 객체, 객체가 GC 뿌리 체인에 대한 참조가 없을 때, 경로 횡단 노드는, 참조의 체인이라고 이러한 노드에서 아래로 검색을 시작합니다 연결, 다음이 객체를 사용할 수없는 것을 증명한다.

72762049.jpguploading.gif업로드 ... 다시 업로드 취소

GC 뿌리는 목적으로 사용할 수있다 :

(1) 가상 머신 스택 (로컬 변수 테이블 스택 프레임) 참조 객체입니다.

정적 특성 영역에 의해 참조 된 오브젝트의 클래스 (2) 제조 방법.

객체 참조 (3) 방법의 일정한 영역입니다.

객체 참조의 JNI 원시 메소드 스택 (즉, 현지에있어서) (4).

죽음의 대상 여부

도달 분석 도달 개체 스크리닝 (1)는 최초로 표시. 조건 스크리닝이 목적은 마무리 방법을 수행 할 필요가 있는지 여부이다. 객체가 더 마무리 방법입니다, 또는 finalize 메소드가 호출되지 않는 가상 머신, 가상 머신을 적용되었을 때,이 두 가지 경우 수행 할 필요가있는 것으로 간주.

(2) 둘째로 마킹 : 제 F 큐 작은 태그 후에 큐 F 큐, GC 힙에 배치 상영 사물. 큐는 방법의 구현을 완료한다.

finalize 메소드는 체인의, 당신은 대기열에서 제거 할 수 있습니다 할 수있다 연관된 객체에 대한 참조입니다에 객체는, 자신을 저장할 수 있습니다.

모든 시스템은 한 번 호출됩니다 마무리 방법을 객체 때문에 오직 위해, 자신을 저장합니다.

넷째, 참조

(1) 강한 참조 : Obeject OBJ = 새로운 객체 ()는, 예컨대 참조 쓰레기 수집기는 객체가 참조되는 오프 회수하지 않았다.

(2) 소프트 인용구 :이 있지만, 반드시 목적에, 시스템은 제 회수를 위해 이러한 개체 회복의 범위에 포함되며, 메모리 오버 플로우 예외 전에 발생한다.

(3) 약 참조 : 다음 가비지 컬렉션이 발생까지만 생존. 가비지 컬렉터 작업이, 여부에 관계없이 충분한 메모리, 복구 할 때

(4) 가상 참조 : 약한. 팬텀 참조 오브젝트는 주로 폐 활동의 회수를 추적하는 데 사용된다.

다섯째, 가비지 컬렉션 알고리즘

(1) 마크 - 스윕 알고리즘

라벨 후 모든 개체에 필요한 첫번째 표시는 복구 할 모든 통합 오브젝트가 표시되어 복구가 완료 :이 알고리즘은 "표시"와 "명확한"단계로 구분된다. 그것은 가장 기본적인 컬렉션 알고리즘, 이후 알고리즘은 결함을주는 개선된다. 이 가비지 컬렉션 알고리즘은 두 가지 명백한 문제를 가져올 것 : 비 효율성 및 메모리 단편화를.

å¬ä¼å ·

(2) 복제 알고리즘

주소 효율성 문제에 대한 위해 수집 알고리즘이 나타났다 "복사". 이는 사용되는 각 중 하나에 두 개의 동일한 크기의 메모리 일 수있다. 메모리 사용량이 한 후, 그것은 또한 라이브 개체가 공간에 또 다른 조각에 복사 한 후 깨끗한 아웃하면 다음 사용 때. 이것은 각각의 복구 된 메모리가 재활용에 대한 반 구간의 메모리입니다 수 있습니다.

å¬ä¼å ·

1 분할되어 있지만 (에덴 + S0) (S1)와 두 개의 부분으로 분할된다 : 현재 차세대 세대에서 사용되는 알고리즘을 사용하는 이러한 알고리즘은, 새로운 세대는 1 따라 아니다.

(3) 표시 - 정렬 알고리즘

"마크 - 스윕"제안 된 라벨 알고리즘 세, 여전히 마킹과의 특징에 따르면 알고리즘은 동일하지만,하지만, 모든 생존 개체에 대한 재활용 개체의 복구를 위해 직접적으로 다음 단계는 깨끗한 밖으로에 직접 다음 한쪽 끝을 향해 이동하고, 최종 경계 이외의 메모리.

æ ° E® -æ'çç®æ³

기존 사용 년에 사용되는 알고리즘,

(4) 세대 컬렉션 알고리즘

현재 가비지 컬렉션 가상 머신 구현 세대 수집 아무것도 새로운 아이디어 알고리즘,하지만 따라 다른 개체에 대한 몇 조각으로 메모리의 기간을 생존. 일반적으로 새로운 세대와 이전 시대에 자바 힙, 그래서 우리는 각 시대의 특성에 따라 적절한 가비지 컬렉션 알고리즘을 선택할 수 있습니다.

당신이 알고리즘을 복사 할 수 있도록 예를 들어, 새로운 세대에, 각 수집은 각 가비지 수집을 완료하는 개체의 적은 수의 재생의 비용을 지불 할 필요가, 죽을 많은 수의 개체를해야합니다. 생존의 세 대상의 기회가 상대적으로 높고, 우리가 선택해야하므로 여분의 공간, 그 보증에 할당되지 않은있다 "마크 - 스윕"또는 "마크 - 마무리"가비지 수집 알고리즘을.

여섯째, 가비지 수집기

(1) 집 전체 직렬

이것은 그것의 가비지 콜렉션이, 스레드가 다른 모든 작업을 중단해야하는 경우, 단일 스레드 컬렉터입니다.

46873026.jpguploading.gif업로드 ... 다시 업로드 취소

장점 : 간단하고 효율적입니다.

단점 : 일시 정지의 감각이, 사용자에게 나쁜 경험을 제공합니다.

(2) 집 ParNew

이것은 일련의 다중 스레드 버전입니다

ParNew æ¶éå¨

그것은 서버 모드에서 실행되는 여러 가상 머신의 첫 번째 선택, 직렬 컬렉터뿐만 아니라, 그것은 단지 (나중에 소개합니다 진정한 의미에서 동시 콜렉터) CMS 컬렉터와 함께 작동합니다.

병렬 동시의 개념을 추가 :

  • 평행 (병렬)  병렬 가비지 콜렉션의 스레드 수를 의미하지만,이 때 사용자 스레드는 대기 상태에서 정지된다.

  • 동시 (동시)은 : 실행 (하지만 반드시 평행하지 교대로 수행 될 수있다), 사용자 프로그램이 계속 실행하고, 다른 CPU에 대한 가비지 수집을 실행하는 동안 사용자 스레드 가비지 컬렉션 스레드를 말한다.

(3) 콜렉터 소기 패러렐

병렬 소기 수집기는, 복사 수집기 알고리즘 멀티 스레딩을 사용할

병렬 소기 컬렉터 우려 처리량 (CPU를 효율적으로 사용)입니다. 초점 CMS 및 기타 가비지 콜렉터 일시 정지 시간 (사용자 경험을 개선) 이상의 사용자 스레드입니다. 처리량은 많은 시간이 소요를 실행하는 전체 사용자 코드의 비율에 대한 CPU의 CPU 시간이라고합니다.

정렬 알고리즘 -의 오래된 마크를 사용하여 복제 알고리즘의 새로운 세대를 사용하여 (1) (2) (3).

(4) 시리얼 오래된 집

직렬 컬렉터의 이전의 버전은 , 또한 단일 스레드 컬렉터입니다. 그것은 두 가지 주요 목적이있다 : 하나 개의 사용 JDK1.5이며 이전 버전의 다른 용도의 사용과 병렬 소기 수집기가 대체 계획, CMS 수집기입니다.

(5) 병렬 오래된 집

기존의 병렬 소기 수집가의 버전 . 알고리즘 - 멀티 스레딩 및 "마무리 마크"의 사용. 행사의 처리량과 CPU 자원에 초점, 그것은 병렬 소기 수집 및 병렬 올드 컬렉터에 우선 순위를 부여 할 수 있습니다.

(6) CMS 수집기

CMS (동시 마크 스윕)는 짧은 복구 시간 목표 일시 콜렉터 콜렉터이다. 이 응용 프로그램을 사용하는데 사용자 경험에 초점을 맞춘 일치한다.

CMS (동시 마크 스윕) 핫스팟 가상 머신 수집기가 처음으로 가비지 컬렉션 스레드를 구현하고, 사용자 스레드 (기본적으로) 같은 시간을 할 수 있다는 점에서 최초의 진정한 동시 컬렉터입니다.

사용하여 마크 - 스윕을 "알고리즘

초기 라벨 :  다른 모든 스레드를 중단하고, 기록 목적은 바로 빠른 루트에 연결;

동시 표시 :  동시에 폐쇄 구조, GC 및 사용자 스레드 상태는 물체까지 기록한다. 그러나이 단계의 끝에서,이 객체에 대한 모든 현재까지를 포함하는 폐쇄 구조를 보장하지 않습니다. 사용자 스레드가 지속적으로 참조 필드를 업데이트 할 수 있기 때문에, 그래서 GC 쓰레드는 실시간 분석의 접근성을 보장 할 수 없습니다. 대신에이 알고리즘은 이러한 업데이트를 추적합니다 그래서 참조를 발생합니다.

레이블이 재 지정 :  보정 단계는 사용자 프로그램의 결과로 동시에 표시하는 것입니다 동안 다시 표시 훨씬 더 동시보다 시간보다 일반적으로 약간 더 긴 마크의 초기 단계를 기록 마크 마크 변동하기의 대상이 단계에서의 체류 시간의 일부를 계속 실행 마크 위상 단시간

동시 명확 :  GC의 스레드가 표시된 영역에 대한 청소 작업을 수행하기 시작하면서, 사용자 스레드를 엽니 다

CMS의 åå¾æ¶éå¨

 

(7) G1 수집기

G1 (가비지 우선) 주로 다중 프로세서 시스템의 대용량 메모리와 같은 시간, 가비지 컬렉터에 대한 서버이다. 높은 확률은 상기 성능 특성 처리량 높은을 포함 GC 휴지 시간의 요구를 충족.

진화의 중요한 특징은 JDK1.7 핫스팟 가상 머신 간주됩니다. 그것은 다음과 같은 특징이 있습니다 :

  • 병렬 및 동시 : G1은 CPU, 멀티 코어 환경에서 하드웨어의 장점을 최대한 활용 할 수 있습니다, 다수의 CPU (CPU 또는 CPU 코어)의 사용은 정지 - 더 - 세계 일시 정지 시간을 단축합니다. 다른 집의 일부는 그렇지 GC 일시 정지 자바 스레드 실행 조치를 요구, G1 수집기는 여전히 진행 동시 방법으로 자바 프로그램을 할 수 있습니다.
  • 세대 모음 : G1은 다른 집으로 필요하지 않을 수도 있지만 독립적으로 전체 GC 힙을 관리 할 수 있지만, 여전히 세대의 개념을 유지합니다.
  • 공간 통합 : CMS에 "마크 - 정리"서로 다른 알고리즘, G1은 전체에 구현 수집 알고리즘 "을 구성하는 태그"를 기반으로는,보기의 지역 지점에서 "복사"알고리즘을 기반으로합니다.
  • 예측 일시 정지 :이 CMS의 다른 큰 장점으로 G1의 기준으로는, G1은 체류 시간과 CMS 공통의 우려를 감소하지만, 저-G1 일시 정지의 추구뿐만 아니라, 일시 정지 시간 모델은 예측 가능 사용을 설정할 수 있습니다 명시 밀리 초 길이 M의 시간 세그먼트를 지정하여.

동작 G1 수집기는 대략 다음과 같은 단계로 나누어 :

  • 초기 마크
  • 동시 표시
  • 최종 마크
  • 필터의 재활용

배경 G1 수집기 각각 허용 수집 시간에 따른 우선 순위리스트를 유지하고, 지역별 선호 회수의 최대 값 (이름의 기원 가비지 먼저이다) . 이러한 메모리 공간은 콜렉터 GF 한시적 포집 효율은 가능한 한 높은 (토막 메모리)로 될 수 있도록하는 우선 순위 및 지역 영역 회수 방법을 사용하여 분할된다.

참조 : https://snailclimb.gitee.io/javaguide/#/docs/java/jvm/JVM%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6?id= _4- % E5 % 9E % 83 % E5 % 9C %로 % E6 % 94 % B6 % E9 % 9B % 86 % E5의 % 99 % A8

 

게시 된 134 개 원래 기사 · 원의 찬양 (91) · 전망 160 000 +

추천

출처blog.csdn.net/weixin_44588495/article/details/104097669