CMS 수집기
CMS 수집기 (ConcurrentMarkSweep가 : 동시 마크 클리어) 가능한 한 짧은 시간 동안 콜렉션 일시 정지는 콜렉터의 목표입니다.
이러한 애플리케이션 서버의 응답 속도에 특히 중점을두고 인터넷 사이트 서버 또는 B / S 시스템에서 사용하기에 적합 짧은 일시 정지 시간에 시스템을 원한다.
CMS는 이상적입니다 대형 힙 메모리, CPU 코어 수와 더 서버 측 응용 프로그램뿐만 아니라 대규모 응용 프로그램을 이전에 수집 된 G1에 나타납니다위한 첫번째 선택.
동시 마크 스윕 동시 표시가 명확 동시 낮은 일시 정지 컬렉션, 동시 사용자 스레드와 실행을 의미
오픈 콜렉터 JVM 파라미터 : - XX : + UseConcMarkSreepGC는,이 파라미터는 자동 - XX 후에 턴온된다 + UseParNewGC 열기.
이 파라미터를 연 후, 백업 CMS 컬렉터로서 컬렉터 ParNew (영 영역) + CMS (이전 - 영역) + SerialOld 조합, SerialOld 오차를 사용한다.
CMS가의 수집 (과도한 메모리 조각화)에 수 없었다 때 SerialOld FullGc을 사용하는 것입니다.
CMS는 GC의 네 단계를 수행 :
- 초기 마크 (CMS 초기 표시) : 단지 마크 무엇을 직접 GC 뿌리와 연관 될 수있는 개체는 매우 빠르고, 아직해야 할 모든 작업 스레드를 일시 중단
- 마크 (CMS 동시 표시) 및 사용자 스레드 동시 : 공정 GC 뿌리 추적 및 사용자 스레드가 함께 작동 작업자 스레드를 일시 중지하지 않고 . 주요 코스 마크, 모든 개체를 표시
- 레이블이 재 지정 (CMS 발언은) 님의 동시 표시 개정 으로 인해 프로그램이 실행 및 라벨 변경에서 개체의 일부가 여전히 있음을 표시 기록을 초래할 계속 사용자에게 기간을 모든 작업 스레드를 일시 중단합니다 . 동시 마크 때문에, 사용자 스레드는 여전히 공식 청소 한 후 보정하기 전에 실행됩니다.
- 동시 클리어 (CMS 동시 스윕) 및 사용자 스레드 함께 : 클리어 GC 뿌리 도달 할 수없는 객체 및 사용자 스레드가 함께 작동 작업자 스레드를 일시 중지하지 않고 . 라벨의 결과를 바탕으로, 개체 정리 지시.
최장 동시 표시 및 소거를 동시에있어서, 가비지 컬렉션 스레드 및 메모리 및 사용자 스레드 CMS 컬렉터의 전체 복구가 동시에 함께하므로, 동시에 함께 작동 할 수있는 사용자로.
네 단계 사진의 GC에 의해 CMS
CMS의 장점 : 낮은 일시 정지 동시 모음
CMS 단점 :
동시 실행, CPU 리소스에 대한 압력 : 인해 동시에, 동시에 수집 및 응용 프로그램 스레드에서 CMS가 이전 가비지 컬렉터의 힙 메모리가 소진되기 전에 CMS가 완료되어야합니다,라고하는 것입니다 힙 메모리의 차지 늘리거나 CMS 것 복구가 실패 할 때, 그것은 보안 메커니즘을 트리거로 기존의 시리얼 수집가의 뜻에
더 큰 결과 STW 방법 마지막 GC는 드웰 시간.클리어 라벨링 알고리즘이 우주 쓰레기를 구성 할 수 없으며, 기존의 공간은 응용 프로그램이 점차 고갈, 그리고 마지막으로 보안 메커니즘에 의해 압축 된 힙 메모리로했다되는 것이다 긴한다. 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整体采用标记-整理算法 | 局部是通过复制算法,不会产生内存碎片 |