처음 두 기사 "JVM 소개 - 런타임 데이터 영역"과 "JVM 공통 가비지 수집 알고리즘"에서는 실제로 JVM 사양과 일반적으로 사용되는 가비지 수집 알고리즘을 언급했습니다. 특정 JVM 구현은 실제로 한 종류 이상입니다. , JRockit, J9이 기다리고 있습니다. 물론 가장 유명한 것은 HotSpot JVM입니다. 다음은 HotSpot JVM의 전체 아키텍처 다이어그램입니다. 이 기사에서는 HotSpot의 가비지 수집기(Garbage Collector)에 중점을 둡니다. ㅋㅋㅋ 새로운 것에서 매우 눈에 띄는 life 신세대와 구세대 사이에서 이
G1 GC는 신세대와 구세대 모두에서 쓸 수 있다고 짐작할 수 있다. 과연 G1
은 획기적인 시대라고 할 수 있다. 새로운 컨셉을 만드는 GC.
위의 가비지 컬렉터를 소개하기 전에 먼저 JVM
가상 머신의Client 모드와 Server 모드에 대해 설명해야 합니다. Java가 할 수 있는 일은 클라이언트가 되는 것입니다. . 간단히 말해서 GUI 데스크톱 애플리케이션이며, 두 번째로 서버 측으로 사용할 수 있습니다. 두 가지 모드:
Client모드는 빠르게 시작되고 시작 후 성능이 저하됩니다. Server 모드는 천천히 시작되고 시작 후 성능이 향상됩니다. Serial GC (-XX:+UseSerialGC, 복사 알고리즘, 새로운 세대 )이것은 비교적 오래된 가비지 수집입니다. 아니면, 이해합니다.
"간단하고 투박한". 단순하고 투박한 방법은 종종 단순한 환경을 처리할 수 있습니다. 실제로 Serial GC는 Client 모드와 완전히 동일합니다. 직렬 가비지 수집기란 다중 코어 프로세서에도 병렬로 수집할 여러 스레드가 없음을 의미합니다. 직렬인 동안 다른 일반 작업 스레드도 작동을 중지합니다. 이를 "세계를 중지하세요" . 이것은 실제로 이해하기 쉽습니다. 쓰레기를 청소할 때 누군가가 동시에 쓰레기를 버리는 것을 원하지 않습니다. 물론
Serial GC는 오늘날의 HotSpot JVMServer 모드에서는 거의 폐기되었습니다. 또한 Java 힙의 젊은 세대에서 작동하는 가비지 수집 " 복사 알고리즘 " 을 사용하여 작동합니다. ParNew GC(-XX:+UseParNewGC, 복사 알고리즘, 신세대 ) ParNew GC사실 그렇죠 Serial GC의 멀티스레드 버전입니다. 위에서 언급했듯이 Serial GC는 멀티 코어 CPU 환경에서도 가비지 메모리 재활용을 위한 단일 스레드입니다. 이 가비지 수집기 측은 다중 스레드 환경에서 가비지 메모리를 재활용할 수 있습니다. 이 다중 스레드는 사용자 스레드와 동시에 실행되는 것이 아니라 가비지 수집의 다중 스레드일 뿐입니다. 그리고 이것만이 CMS의 구세대 가비지 수집기와 함께 사용할 수 있으며 CMS는 정확히 획기적인 가비지 수집기이므로 JVM의 구세대 가비지 수집기가 인 경우 CMS, 차세대 가비지 수집기는 일반적으로 ParNew GC입니다. Parallel GC (-XX:+UseParallelGC, 복사 알고리즘, 신세대) ParaNew GC와 다소 유사하며 이름에서도 병렬입니다. 다중 스레드 수집 장치. 앞서 GC 과정에서 "세상을 멈춰라"해야 한다고 언급한 바 있습니다. 일시 중지 시간이 짧을수록 많은 가비지 수집가(처음 두 개 포함)가 개선 방법에 집중하는 것이 좋습니다. 시간을 일시 중지합니다. 그리고 병렬 GC는 처리량에 중점을 둡니다. 가비지 수집의 전체 시간 소모에 중점을 둡니다. 가비지 수집의 전체 시간이 짧을수록 처리량이 높아지고 CPU가 작업 실행,(처리량 )에 더 많은 시간을 소비할 수 있습니다. = 작업 실행 시간 /(작업 실행 시간 + 가비지 수집 시간)). Serial Old GC(-XX:+UseSerialOldGC, -압축 알고리즘으로 표시, 이전 세대) Serial GC 이전 버전도 마찬가지 단일 스레드이며 이전 세대 GC로 Parallel GC와 함께 사용할 수도 있습니다. Parallel Old GC (-XX: +UseParallelOldGC, -압축 알고리즘으로 표시, 이전 세대) 새로운 세대에서는 Parallel GC를 선택하고 Old 세대에서는 Serial Old GC만 선택해야 하는 딜레마를 피하기 위해 Parallel GC의 Old 세대 버전이 등장했습니다.——Parallel Old GC. 따라서 높은 처리량이 요구되는 일부 상수를 사용한다면 Parallel GC와 Parallel Old GC의 조합이 좋은 선택이 될 것입니다. CMS GC 거의 점유 구세대 가비지 수집기의 절반을 차지하는 획기적인 의미는 가비지 수집 스레드가 사용자 스레드와 거의 동시에 작동할 수 있다는 것입니다. "거의"은 여전히 할 수 없기 때문에 "세상을 멈춰라"가 필요하지 않지만 일시 중지 시간을 최대한 단축합니다. 전체 가비지 수집 프로세스는 다음 4 단계로 나눌 수 있습니다. 초기 표시동시 표시Remarking 동시 정리 업 이것 "Stop the world"을 수행해야 함, 동시 마킹 P 실제적인 과정은 위의 것입니다 사용자 스레드와 동시에 작업하는 것, 즉 "쓰레기를 버리는 것과 동시에 청소하는 것" 이로 인해 마킹 후 쓰레기가 생성되면 문제가 발생합니다. 다음 번에 재활용할 때까지 기다리세요. 물론 마킹이 완료된 후에는 쓰레기가 사용자 스레드와 자연스럽게 충돌하지 않으며 청소 프로세스도 사용자 스레드와 동시에 처리될 수 있습니다. 이 가비지 수집기의 가장 명백하고 피할 수 없는 문제 중 하나는 "mark-clear" 알고리즘을 사용한다는 것입니다. 즉, 살아남은 개체를 압축하지 않습니다. 메모리 공간 조각화 문제에 대해 연속적으로 큰 메모리 공간을 할당해야 하는 경우 Full GC 한 번만 트리거할 수 있습니다. 이전 기사 "JVM Common Garbage Collection Algorithms"에서는 신세대의 가비지 컬렉션을 "Minor GC" 라고 하고, Old 세대의 가비지 컬렉션을 "Major GC" 라고 부른다고 언급했습니다. , and " "Full GC"는 전체 힙에 대해 가비지 수집을 트리거합니다. 비용이 상당히 높을 것으로 예상되며 이때 사용자 스레드가 일시 중지되어야 합니다. 매개 변수만 조정할 수 있습니다. CMS GC의 특정 사용 시나리오를 조정하고 최적화하세요. ☆가비지 우선(G1) GC (-XX:+UseG1GC) G1 GC는 이전의 모든 가비지 컬렉터와는 다르게 처음 두 번째 그림에서 볼 수 있듯이 신세대와 구세대를 포괄하거나 논리적으로만 유지됩니다" "new"라는 용어 "세대와 "old세대 "세대는 실제로 더 이상 존재하지 않습니다. JDK6에서는 실험적인 버전일 뿐이며 JDK7u4에서는 공식적으로 상용화되지 않습니다. 나중에 이 가비지 컬렉터에 대해 별도로 설명하겠습니다. 또한 문서 주소는 http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1&rep=rep1&type=pdf입니다. .
짧은
위 내용은 핫스팟--가비지 수집기(JVM)에 대해 자세히 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!