JVM- [02] 그 인식 JVM 가비지 컬렉션 알고리즘과 집

1. 개체의 생존 판사

1.1. 참조 카운팅 알고리즘 참조 카운팅

  • 실패를 참조 할 때, 카운터 값이 감소되고, 오브젝트가 그 위치에 대한 참조는, 카운터 값이 증가 될 때마다 기준 카운터에 추가되면 0 언제 카운터 객체는 더 이상 사용중인.
  • 주류 JVM 메모리를 관리하기 위해 참조 카운팅 알고리즘을 선택되지 않은 주요 이유는 객체 참조 상호 순환의 문제를 해결하는 것이 곤란하다는 것이다.

1.2. 도달 가능성 분석 알고리즘 도달 가능성 분석

  • 오브젝트가 임의의 참조 GC 뿌리 사슬에 연결되지 않은, 다운 노드로부터 탐색 개시라는 검색 경로 이송 기준 쇄 (참조 체인) 출발 지점 "GC-뿌리"라는 일련의 객체에 의해, 이 때, 그것은이 오브젝트가 사용 불가능 (연결할 그래프 이론) 인 것을 증명한다.
  • 이것은 GC 뿌리의 목적으로 사용할 수있다 :

VM 스택 (로컬 변수 테이블 전쟁) 참조 된 개체

방법 정적 속성 클래스 객체는 지역에 따라 참조

일정한 기준 오브젝트 영역에있어서

JNI 네이티브 메소드 스택 객체 참조


1.3. 참조 유형 참조

  • 강한 참조 : 강한 참조

그것은 비슷한을 말한다 Object object = new Object()강한 참조가있는만큼, 참조의 유형, 가비지 컬렉터는 것입니다 결코 참조 된 개체를 복구하지 않습니다.

  • 소프트 참조 : 소프트 참조

이 필요한 객체를 몇 가지를 설명하는 데 사용,하지만. JDK에는 소프트 참조를 달성하는 SoftReference를 제공합니다

시스템 메모리 오버플로 이동하여 발생하기 전에,이 개체는 복구의 제 범위로 컬럼 내에 회수된다. 복구가 충분한 메모리가있는 경우, 메모리 오버 플로우 예외가 발생됩니다.

  • 약한 참조 : 약한 참조

중요하지 않은 개체를 설명하는 데 사용, 강도는 더 약한,이 소프트 참조보다 약한 참조 개체와 연결된이다 가 발생하기 전에 만 다음 가비지 컬렉션 때까지 살아남을 수 있습니다 . JDK에는 약한 참조를 구현하는 WeakReference를 클래스를 제공합니다.

가비지 컬렉터 작업에 관계없이 현재 메모리의 적정성은 회복 될 때 손실 된 개체가 약한 참조와 연관됩니다.

  • 거짓 인용 : 팬텀 참조

또한 유령 팬텀 참조로 인용 된,이 약한 관계에 대한 참조 공지. 완전히 자신의 생존 기간에 영향을주지 않습니다했다 팬텀 참조 오브젝트가 있는지, 팬텀 참조 객체 인스턴스에 의해 달성 될 수 없다. JDK 클래스는 가상 참조 PhantomReference를 제공하기 위해 구현

이 타겟과 연관된 가상 기준을 설정하는 목적은 수 목표 시스템 콜렉터를 복구 통지를 수신 .


1.3. 참조 유형 참조

  • 일시적으로 "집행 유예"단계에 도달 할 수없는 개체는 정말 라벨링 과정을 거쳐야 적어도 두 번, 개체의 죽음을 선포합니다 :

    도달 성 분석에서 개체 참조가 연결된 체인없고 GC 뿌리 발견되면, 그것은 것 제 마크 대상물 것을 조건으로 스크리닝을 수행하는 것이 필요한지를 파이널 라이즈 () 메소드를 수행하기 위해 . 객체가 파이널 라이즈 () 방법, 또는 파이널 라이즈를 () 메소드는 가상 머신을 통해 호출 된 적용되지 않을 때 , 가상 머신은이 두 케이스는 "를 수행 할 필요가 없다."간주

    개체에서) (자신의 구조 마무리에 성공하는 경우 마무리 () 메서드는 개체의 죽음의 운명을 탈출 할 수있는 마지막 기회입니다, 나중에 GC는 두 번째 작은 마크에서 F-대기열 객체가 될 것이다 - 단지와 다시 연결하려면 체인의 객체에 대한 참조는 이러한 클래스 변수 또는 객체의 멤버 변수에 할당 (키워드) 자신과 같이 연관 될 수 있고, 그럼 밖으로 제거 될 초 마크에 "회수한다" 수집, 객체가이 시간을 탈출하지 않은 경우, 정말 기본적으로 복구 된 것입니다.

    주 : 마무리 ()를 구현할 필요성을 결정하기위한 방법을 노래 객체가 다음 객체가 큐에 배치 될 경우에는 F-큐라고하고 JVM은이를 실행할 수있는 낮은 우선 순위 파이널 스레드를 생성한다. 느린 구현 또는 무한 루프 가능성이 F-큐 큐 다른 객체로 이어질 것입니다 경우 객체의 finalize 메소드 영원히, 심지어 전체 시스템 메모리 리콜 벤 붕괴 원인 기다리면 때문에 JVM은이 방법이 끝을 수행하는 것을 보장하지 않습니다 트리거합니다.


2. 가비지 수집 수

2.1 마크 - 스윕 알고리즘 마크 스윕

  • 두 단계, 즉 마크와 청소에 알고리즘.

    1. 대지의 필요성을 표시하면 객체를 복구 할 수 있습니다
    1. 모든 표시 객체의 리사이클 균일의 완료를 표시 한 후
  • 주요 결핍 알고리즘

    1. 효율성, 마킹이 공정 효율을 삭제하는 것은 높지 않다
    2. 공간 문제, 명확한 라벨 후회는 연속 공간의 많은 양을 생산하지

    너무 많은 우주 쓰레기는 미래가 큰 개체의 할당을 저장하기에 충분한 연속 메모리를 찾을 수없는 원인이 다른 가비지 수집을 트리거했습니다 수 있습니다.


2.2 복제 알고리즘 복사

  • 사용할 수있는 메모리 용량에 따라 두 개의 동일한 크기, 상기마다 하나씩으로 분할된다. 현재 하나의 또 다른 조각의 상단에있는 개체의 생존에 이동, 밖으로 실행하고 메모리 공간은 한 번 청소 아웃을 사용하고있다. 따라서, 각 스택의 메모리 복잡한 메모리 단편화 등 간단하고 효율적인 작업을 할당 할 때 고려되지 않고, 반 전체 메모리 회수 구역이다. 메모리의 비용은 절반으로 감소합니다.

2.3 마크 - 정렬 알고리즘 마크 컴팩트

  • 직접 재활용하지 개체가 표시 후 청소 있지만, 모든 생존 개체를 끝으로 이동하려면 다음 끝 국경에 직접 해당 메모리를 청소합니다.

2.4. 세대 수집 알고리즘 세대 컬렉션

  • JVM 힙 메모리는 다른 시간에 다른 모음 알고리즘을 위해, 신구 세대의로 구분된다.

    쓰레기의 각각의 새로운 세대에 많은 수의 개체를 수집 할 때 다음 선택 알고리즘을 복사, 단지 몇 생존, 사망 한 것으로 발견된다.

    복구 알고리즘 - 또는 "마무리 마크"- 때문에 객체의 높은 생존율의 옛 시대, 그것은 "청소 마크"를 사용합니다 여분의 공간이 보장에 할당되지 않은있다.


3. 가비지 수집 수

3.1. 열거 루트

  • 도달 가능성 분석은 GC 뿌리 노드로부터 참조 체인 동작을 찾기 위해, 메소드 영역은 이제 시간이 걸리는 기준의 내부를 점검 한 백에 의해, 하나의 몇을 말한다.
  • 민감한 실행 시간의 도달 가능성 분석은 GC 일시 정지에 반영됩니다 분석은 일관된 스냅 샷을 보장 할 수 있어야합니다

    여기에 전체 기간 동안 일관성이 시스템의 구현은 노드에서 시간에 냉동처럼 엽니 다. 이 만족하지 않는 경우 정확도는 보장 할 수 없습니다. 이것은 모든 Java 스레드가 GC가 수행 실행 중지해야합니다 하나의 중요한 이유입니다. 심지어 열거 루트 (발생하지 않는 가상 정지이라고도 함) CMS 컬렉터와는 교착해야합니다.

  • , 핫스팟에서 데이터 OopMap 세트의 사용이 정보를 저장할 위치를 시스템의 구현이 완전히 모든 참조 및 글로벌 위치를 확인하기 위해 실행 컨텍스트를 중단 생략 할 필요가 없습니다 그래서 JVM을 사용하는 정확한 형 GC 주류, JVM은 알고있다 이 목적을 달성하는 구조.

    클래스를로드 한 후, JIT 컴파일 과정에서 계산 된 객체 핫스팟 바 내 오프셋 각각의 유형은 또한 스택 내의 특정 위치에 기록하고 참조하는 위치를 등록한다. GC 스캔하면 직접이 정보를 알 수 있습니다.


3.2. 안전 점 Safepoint

  • 핫스팟 스택을 기록하고 "안전한 포인트"라는 기준 위치에서 "특정 위치", 즉 프로그램 실행이 GC를 시작하는 모든 장소에서 중단 올 수 인 등록 할 때, 오직하기 위해 특정 위치에서 안전한 지점에 도달하기 일시 중지합니다.

  • 안전 점은 너무 많이하거나 너무 적게, 너무 많이 증가 시스템 부하가 너무 GC 시간이 초과 할 수 없다. 기본 안전 점의 선택에있다 그래서 표준으로 채택 된 "장기 실행 특성이 있는지 여부 프로그램을하자".

    프로그램 명령어 스트림이되기 어려운 때문에 각 명령 실행 시간이 매우 짧기 때문에 너무 긴 길이가 너무 긴이 긴 특징 런 다중화하는 명령들의 시퀀스 , 사이클 스킵 , 비정상적인 점프

  • 어떻게 모든 스레드가 GC 안전한 지점에 가서 다음 중단에 와서 발생했는지 확인하기 위해, 두 가지 옵션이 있습니다 :

    선제 인터럽트 (선제 서스펜션) : GC가 발생하면 보안 스레드 브레이크 포인트가없는 경우, 먼저 모든 혼란의 모든 스레드, 그 다음 스레드를 다시 시작 발견되면, 그것은 안전한 지점에 갔다.

    활성 인터럽트 (자발적 정지) : 그는이 보류 중단 할 때 GC가 중단 된 스레드를해야 할 때, 스레드를 직접 작동하지 않는, 단순히 플래그 플래그에게 실행의 각 스레드를 폴링이 주도권을 설정은, 인터럽트 플래그는 자신에게 진실 밝혀 . 투표소 표지판 및 안전 점은 일치하고, 게다가 다른 만들 수있는 객체는 로컬 메모리를 할당해야합니다.


3.3. 보안 영역 안전 지역

  • 그것은 보안 영역 부분의 코드를 의미했다 참조 관계는 변하지 않는다. GC는 어느 곳이 분야에서 시작하는 것이 안전합니다.
  • 스레드가 안전 지역의 코드를 실행하면, 그는 첫번째 안전 지역 스레드의 상태로 자신을 식별 제어하지 않는,이 시간, JVM이 GC를 시작하는 안전 지역을 입력했다. 스레드가 안전 지역을 떠날 때, 완성 된 경우, 해당 스레드가 계속, 그렇지 않은 경우는 안전 지역받은두고하는 것이 안전합니다 알고 기다려야 할 것이다 시스템이 열거 루트 (또는 전체 프로세스 GC를) 완료 여부를 확인하는 것입니다 신호 원경.

4. 가비지 수집기

4.1. 직렬 수집기

  • 단일 스레드 가비지 콜렉터가, 그것은 단지 수집을 완료하는 데 하나 개의 CPU 또는 가비지 컬렉션 스레드를 사용하는 것입니다.
  • 이 가비지 컬렉션을 수행 할 때, 당신은 다른 모든 스레드 작업을 중단 컬렉션의 끝을 알고 있어야합니다.
  • 클라이언트에 적용합니다.
  • 복제 알고리즘의 새로운 세대의 사용은 모든 스레드를 일시 중단, 세 마크의 사용 - 정렬 알고리즘은 모든 스레드를 일시 중지합니다.

4.2. ParNew 수집기

  • 시리얼 멀티 스레드 버전은 가비지 컬렉션을위한 여러 스레드의 사용뿐만 아니라, 사용 가능한 매개 변수 직렬 수집, 수집 알고리즘, 정지 세계, 객체 할당 규칙을 포함하는 기타 행위는, 복구 전략은 정확히 직렬 수집기와 동일

  • 직렬 컬렉터 또한, 현재는 CMS 컬렉터와 함께 작동합니다.

    ParNew 수집도 사용 -XX:+UseConcMarkSweepGC당신이 사용할 수있는, 수집가의 새로운 세대에 대한 기본 옵션을 -XX:+UseParNewGC필수 지정하는 옵션을 선택합니다.

    ParNew 하나의 핵보다 더 좋은하지 직렬 수집기 효과보다는

    당신은 -XX 사용할 수 있습니다 ParallelGCThreads는 가비지 컬렉션 스레드 수를 제한하는 매개 변수입니다.


4.3. 소기 컬렉터 병렬

  • 그는 또한 복사 알고리즘 수집뿐만 아니라 병렬 멀티 스레드 프로세서를 이용하여 프로세서의 새로운 세대이다.

  • 병렬 소기 콜렉터 오브젝트 제어 소정 도달한다.

    처리량 = 실행 사용자 코드 시간 / (사용자 코드 시간 + 시간 가비지 컬렉션을 실행)

  • 그것은 두 개의 매개 변수 제어를 제공 처리량 : MaxGCPauseMillis, 직접 크기 -XX 처리량 : 가비지 콜렉션 일시 정지 시간 -XX 최대 제어 GCTimeRatio을

    -XX : MaxGCPauseMillis : 허용 값은 0 밀리 초보다 숫자 큰 콜렉터는 설정 값은 GC 휴지 시간이 단축되고, 새로운 세대의 공간 교환의 비용 처리량을 초과하지 않는 메모리 복구 비용을 확보 할 수있을 것이다.

    -XX : GCTimeRatio는 : 상기 최대 허용 시간은 1 / (1 + 19) 19 99 최대 시간이 허용된다 : 파라미터 값과 같은 정수의 0보다 크고 100 미만, 총 가비지 콜렉션 시간 기간의 비율 인 1 / (1 + 99)

  • 병렬 폐품을 参数 : -XX : UseAdaptiveSizePolicy

    -XX은 수동으로 열 에덴과 생존자 지역보다, 객체의 오래된 크기 매개 변수의 프로모션 세부 사항을 새로운 세대의 크기를 지정하려면이 필요하지 않습니다,이 매개 변수를 열 UseAdaptiveSizePolicy. 동적 성능 모니터링의 현재 시스템의 작동에 따라 수집에 가장 적합한 일시 정지 시간과 최대 처리량을 제공하기 위해 이러한 매개 변수를 조정하는 가상 기회,이 조정 적응 전략 GC라고 (GC 인체 공학)


4.4. 직렬 오래된 집

  • 직렬 오래된 컬렉터의 에디션은 단일 스레드는 "마크 - 마무리"를 사용하여 알고리즘을
  • 동시 모음 동시 모드 실패는 CMS 컬렉터 다시 요소로 발생할 때 사용됩니다.

4.5. 오래된 집 병렬

  • 그것은 이전의 병렬 소기 수집가의 버전입니다. 알고리즘 - 멀티 스레딩 및 "마무리 마크"의 사용.
  • 처리량 및 CPU 리소스에 민감한 장면에 초점, 당신은 Paralled 소기의 우선 순위 + 올드 수집기를 병렬 수 있습니다.

4.6 CMS (동시 마크 스왑) 컬렉터

  • CMS (동시 마크 스윕)는 짧은 복구 시간 목표 일시 콜렉터 콜렉터이다. 인터넷 사이트 및 서비스 측의 B / S 시스템에 적합합니다. 동시 수집, 낮은 정지.

  • CMS 컬렉터는 "마크 - 스윕"을 기반으로 알고리즘, 과정은 네 단계로 나누어 져 있습니다 :

    초기 마크 (CMS 초기 마크) : 단지 객체가 매우 빠르고, GC의 뿌리에 직접 연결될 수있는 표시합니다.

    동시 마크 (CMS 동시 표시) : 프로세스의 추적 GC 뿌리.

    레이블이 재 (CMS 비고)으로 인해 사용자 프로그램 보정 표시된 기록되었다 동시 표시하는 동안 계속 동작 라벨 변경되는 오브젝트의 일부있다. 일시 정지 시간은 일반적으로 더 이상 초기 마크, 동시 마크보다 짧은 시간보다.

    동시 클리어 (CMS 동시 스윕)

    를 Where 초기 마커 , 다시 마크 이 두 단계가 여전히 필요 "은 세계를 중지"

  • CMS 몇 가지 단점 :

    CPU 자원에 매우 민감 : 그것은 정지 사용자 스레드로 연결되지 않지만, 스레드 컴퓨팅 자원의 CPU 소비 활성화되어 있지만, 느린 참조 전체 처리량을 낮출 이어질 것입니다. 스레드의 기본 개수는 CMS는 회복 즉 / 4 (CPU + 3의 수), 적은 CPU는 더 높은 성능, 더 큰 프로그램에 미치는 영향을 차지할 것입니다 수 있었다. 이러한 상황에 대응하여, JVM은 "증분 동시 컬렉터"(증분 동시 마크 교환 / I-CMS), 선제 멀티 태스킹의 사용을 모의 동시 표시 및 GC 스레드, 사용자 스레드 시간 스윕하도록 제공 교대로 실행합니다. 가비지 컬렉션 시간의 전체 과정이 더 길어질 수 있습니다 그래서, GC의 스레드 시간 독점적 인 자원을 최소화하지만 사용자에 미치는 영향이 덜된다.

    CMS는 "처리 할 수 없습니다 (부동 쓰레기) 쓰레기 부동 전체 GC의 또 다른를 생산하는 오류로 인해 발생"동시 모드 실패 "가 나타날 수 있습니다". CMS가 마음 정리 쓰레기 복잡의 사용자 스레드에 의해 생성되는 부동 쓰레기가 계속 실행되고, 쓰레기 처리로 더 이상 마크의이 부분 이후에 표시되지 않습니다. 사용자 스레드가 계속 실행되기 때문에 CMS가 트리거 비율을 설정할 수 있도록 옆으로 사용자 스레드의 메모리의 일부를 설정해야 -XX:CMSInitiatingOccupancyFraction=70하고 -XX:+UseCMSInitiatingOccupancyOnly자동으로 조정되지에, 전 세트를 비율 만 설정까지 후자 세트의 비율을 JVM하지 설정 백업하는 경우 첫 번째 70 다음 자동으로 JVM으로 조정됩니다, 사용됩니다. CMS가 실행중인 경우, 예약 된 메모리가 요구를 충족 할 수 없다 "동시 모드 실패"가있을 것입니다, 이것은의 재 된 컬렉션에 직렬 올드 가능합니다 JVM을 사용하는 백업 계획이다. 따라서, 비율은 그렇지 않은 경우는 쉽게 동시 모드 실패를 야기하지만, 성능을 낮출 것이다, 너무 높게 설정 될 수 없습니다.

    컬렉션의 끝에 우주 파편을 많이해야합니다 그래서 후, 알고리즘 - CMS는 "청소 마크"를 기반으로합니다. 공간을 많이하지만,하지만 전체 GC를 실행했다 큰 개체에 대한 연속 된 공간을 찾을 수 없습니다. 이 문제를 해결하기 위해 CMS는 -XX 제공 : + UseCMSCompactAtFullCollection, 우주 쓰레기의 문제를 해결하기 위해,이 과정을 동시에 수행 할 수 없습니다 CMS가 열려 전체 GC 메모리 조각화 병합 일종의 할 시간에, 그러나 일시 정지 시간이 길어진다. CMS는 또한 -XX 있습니다 대역 압축 한 다음 압축 해제 전체 GC 실행은, 각각의 엔트리는 0이 압축되는 전체 GC이다 횟수 CMSFullGCsBeforeCompaction 후,이 파라미터 세트에 사용된다.


4.7 G1 (가비지으로) 수집

  • G1 가비지 수집기는 서버 응용 프로그램을 위해 설계되었습니다. 핫스팟은 CMS, 다음과 같은 기능을 대체하기 위해 개발 :

    병렬 및 동시가 : G1은 정지 - 더 - 세계의 일시 정지 시간을 단축, 환경에 여러 개의 CPU를 사용하는 멀티 CPU, 멀티 코어 하드웨어의 장점을 최대한 활용할 수 있으며, 다른 수집가의 일부는 그렇지 GC 일시 정지 작업을 자바 스레드 실행, G1 수집기를 필요 여전히 방법에 의한 동시 자바 프로그램을 계속 할 수 있습니다.

    세대 컬렉션 : 세대 개념은 여전히 ​​G1에 보존됩니다. G1은 독립적으로 전체 GC 힙을 관리 할 수 ​​다른 수집가로 필요하지 않을 수 있습니다, 새로 생성 된 개체를 처리하는 여러 가지 방법을 사용할 수 있습니다 더 나은 수집 결과를 얻을 수 GC 된 개체 여러 번을 통해 얻을 수있는 몇 시간 동안 살아있다 . G1은 새로운 세대를 관리 할 수 ​​있으며, 기존의 소유.

    예측 일시 정지 : 드웰 시간이 공통의 관심사와 CMS G1, G1이 낮은 일시 정지의 추구뿐만 아니라, 그들이 예측 일시 정지 시간 모델을 만든 명시 적으로 사용자가 길이 M 밀리의 세그먼트에서 기간을 지정할 수 감소, 가비지 수집기의 거의 실시간 자바 (RTSJ)의 특징 N 밀리 초를 초과 할 수 없다 가비지 콜렉션 시간 소모. G1은 전체 JVM 힙 피하기 가비지 수집 계획 될 수 각각에 대한 스크리닝 복구 단계의 끝에서 분석 하였다 (취득 할 수있는 영역의 메모리와 시간을 소비 회수의 비율)이 목표 값의 각 영역에 대해 회수 할 수있다 복구 된 객체의 값 최종 정렬 (영역에 소요 메모리 회복률을 얻을 수있다), 체류 시간을 정의 할 수있는 사용자가 상기 G1의 영역의 일부를 회수 할 수있는 영역! 이것은 나머지 시간은 자신이 제어 할 수있는 사용자입니다 수 있습니다!

    통합 공간 생성없이 메모리 단편화 : G1 별도의 영역을 사용하기 때문에 (지역) 개념, G1은 전체에 기초한다 "마크 - 마무리"컬렉션 알고리즘 "복사"를 기반으로 뷰의 로컬 (두 지역) 알고리즘의 관점에서 달성하지만, 어떤 경우에, 이러한 두 알고리즘은 G1 동작시에는 메모리 공간 파편을 의미 없음.

  • G1은 이전에 다른 수집가의 수집의 범위는 완전히 새로운 세대 또는 기존의 없으며, G1 더 이상 그렇지 않다. G1은 집 전체를 사용하는 경우, 자바 힙 메모리 레이아웃 다른 집에 따라 크게 달라질 또한 새로운 세대의 개념 및 나이가 유지되고 있지만, 그것은 전체 Java 힙은 동일한 크기 (영역)의 다수의 독립적 인 영역으로 분할한다 그러나 새로운 세대와 이전 해 더 이상 물리적으로 분리되지 않으며, 그들은 지역 (반드시 연속하지 않음) 컬렉션의 일부입니다.

  • 이 자바를 통해 지역에 걸쳐 힙 가비지 수집을 방지하기 위해 계획 할 수 있기 때문에 G1 수집기 모델은 예측 가능한 일시 정지 시간을 설정할 수있다. 허용 된 각각의 수집 시간에 따른 우선 순위리스트를 유지하는 백그라운드 가비지 누적 값 크기 내부 G1 트랙 개별 영역 (공간 복구 경험을 획득하고, 시간 복구를 필요), 우선 순위 영역의 최대 회수 값 ( 이 이유 쓰레기-먼저 이름)입니다. 메모리 공간과 영역 분할의 사용은 제한된 시간 내에 가능한 가장 높은 포집 효율을 얻을 수있는 G1 수집을 보장하기 위해 우선 순위 영역 복구 방법이있다.

  • G1 수집기는 지역 및 컬렉터와 새로운 세대의 오래된 따옴표 사이에 다른 객체 사이의 객체 참조는, 가상 머신은 힙의 전체 검사를 피하기 위해 설정을 기억했다 사용하고 있습니다. 각 지역은 데이터 쓰기 작업의 종류의 참조의 가상 머신 발견 절차, 그것은 장벽은 쓰기 작업 개체를 임시 중단 쓰기를 생성합니다 해당 기억 된 설정에서 G1을 가지고, 참조 인용 검사는 다른 지역에 그렇다면, CardTable에 의해 관련 참조 정보는 지역의 기억 된 설정에 기록하는 경우 (객체는 객체의 새로운 세대의 이전 시대에 대한 참조인지 여부 세대 검사의 예에서) 사이, 및 참조 된 개체가 속한. 메모리 복구가 열거 범위 GC의 루트 노드에서 설정을 기억 된 추가 할 때 전체 힙 스캔 누락이되지 않습니다 보장 할 수 없습니다.

  • 기억 된 설정하지 계산 유지 동작이 동작 G1 수집기는 다음 단계로 분할 될 수있다 :

    초기 라벨 (표시 초기)

    동시 마크 (동시 마킹)

    최종 마크 (최종 마킹)

    필터 재활용 (라이브 데이터 계수 및 대피)

게시 34 개 원래 기사 · 원 찬양 7 · 전망 8154

추천

출처blog.csdn.net/ilo114/article/details/100776479