자바 - 자세한 GC 가비지 수집기 (b)

CMS 수집기

CMS 수집기 (ConcurrentMarkSweep가 : 동시 마크 클리어) 가능한 한 짧은 시간 동안 콜렉션 일시 정지는 콜렉터의 목표입니다.

이러한 애플리케이션 서버의 응답 속도에 특히 중점을두고 인터넷 사이트 서버 또는 B / S 시스템에서 사용하기에 적합 짧은 일시 정지 시간에 시스템을 원한다.

CMS는 이상적입니다 대형 힙 메모리, CPU 코어 수와 더 서버 측 응용 프로그램뿐만 아니라 대규모 응용 프로그램을 이전에 수집 된 G1에 나타납니다위한 첫번째 선택.

동시 마크 스윕 동시 표시가 명확 동시 낮은 일시 정지 컬렉션, 동시 사용자 스레드와 실행을 의미

오픈 콜렉터 JVM 파라미터 : - XX : + UseConcMarkSreepGC는,이 파라미터는 자동 - XX 후에 턴온된다 + UseParNewGC 열기.

이 파라미터를 연 후, 백업 CMS 컬렉터로서 컬렉터 ParNew (영 영역) + CMS (이전 - 영역) + SerialOld 조합, SerialOld 오차를 사용한다.

CMS가의 수집 (과도한 메모리 조각화)에 수 없었다 때 SerialOld FullGc을 사용하는 것입니다.

CMS는 GC의 네 단계를 수행 :

  1. 초기 마크 (CMS 초기 표시) : 단지 마크 무엇을 직접 GC 뿌리와 연관 될 수있는 개체는 매우 빠르고, 아직해야 할 모든 작업 스레드를 일시 중단
  2. 마크 (CMS 동시 표시) 및 사용자 스레드 동시 : 공정 GC 뿌리 추적 및 사용자 스레드가 함께 작동 작업자 스레드를 일시 중지하지 않고 . 주요 코스 마크, 모든 개체를 표시
  3. 레이블이 재 지정 (CMS 발언은) 님의 동시 표시 개정 으로 인해 프로그램이 실행 및 라벨 변경에서 개체의 일부가 여전히 있음을 표시 기록을 초래할 계속 사용자에게 기간을 모든 작업 스레드를 일시 중단합니다 . 동시 마크 때문에, 사용자 스레드는 여전히 공식 청소 한 후 보정하기 전에 실행됩니다.
  4. 동시 클리어 (CMS 동시 스윕) 및 사용자 스레드 함께 : 클리어 GC 뿌리 도달 할 수없는 객체 및 사용자 스레드가 함께 작동 작업자 스레드를 일시 중지하지 않고 . 라벨의 결과를 바탕으로, 개체 정리 지시.

최장 동시 표시 및 소거를 동시에있어서, 가비지 컬렉션 스레드 및 메모리 및 사용자 스레드 CMS 컬렉터의 전체 복구가 동시에 함께하므로, 동시에 함께 작동 할 수있는 사용자로.

네 단계 사진의 GC에 의해 CMS

CMS의 장점 : 낮은 일시 정지 동시 모음

CMS 단점 :

  1. 동시 실행, CPU 리소스에 대한 압력 : 인해 동시에, 동시에 수집 및 응용 프로그램 스레드에서 CMS가 이전 가비지 컬렉터의 힙 메모리가 소진되기 전에 CMS가 완료되어야합니다,라고하는 것입니다 힙 메모리의 차지 늘리거나 CMS 것 복구가 실패 할 때, 그것은 보안 메커니즘을 트리거로 기존의 시리얼 수집가의 뜻에
    더 큰 결과 STW 방법 마지막 GC는 드웰 시간.

  2. 클리어 라벨링 알고리즘이 우주 쓰레기를 구성 할 수 없으며, 기존의 공간은 응용 프로그램이 점차 고갈, 그리고 마지막으로 보안 메커니즘에 의해 압축 된 힙 메모리로했다되는 것이다 긴한다. CMS는 또한 지정 (마다 메모리 통합을 수행 기본 0) 매개 변수 -XXlCMSFullGCsBeForeCompaction를 제공 횟수 CMS 수집 후, 전체 GC의 압축 번.

어떻게 가비지 컬렉터를 선택합니다

  • 작은 하나의 CPU 나 메모리, 독립 실행 형 프로그램
    -XX을 : + UseSerialGC를
  • 멀티 CPU는, 백그라운드 응용 프로그램과 같이 계산된다 처리량 최대 필요
    + UseParallelGc 나 : -XX
    -XX를 : + UseParallelOlGC를
  • 多CPU,追求低停顿时间,需快速响应如互联网应用
    -XX:+UseConcMarkSweepGC
    -XX:+ParNewGC
参数 新生代垃圾收集器 新生代算法 老年代垃圾收集器 老年代算法
-XX:+UseSerialGc SerialGc 复制 SerialOldGc 标整
-XX:+UseParNewGc ParNew 复制 SerialOldGc 标整
-XX:+UseParallelGc/-XX:+UseParallelOldGc Parallel[Scavenge] 复制 ParallelOld 标整
-XX:+UseConcMarkSweepGc ParNew 复制 CMS+SerialOld的收集器组合(SerialOld作为CMS出错的后备收集器) 标清
-XX:+UseG1GC G1整体采用标记-整理算法 局部是通过复制算法,不会产生内存碎片

추천

출처www.cnblogs.com/cjunn/p/12233441.html