젊은 세대의 가비지 수집을위한 알고리즘입니다.
두 번째 것 (UseParNewGC)은 동시 보유 세대 가비지 콜렉션 ( Java Concurrent 및 Parallel GC 참조)과 함께 자동으로 활성화 되지만 두 병렬 알고리즘간에 차이점이 있습니까?
젊은 세대의 가비지 수집을위한 알고리즘입니다.
두 번째 것 (UseParNewGC)은 동시 보유 세대 가비지 콜렉션 ( Java Concurrent 및 Parallel GC 참조)과 함께 자동으로 활성화 되지만 두 병렬 알고리즘간에 차이점이 있습니까?
답변:
많은 검색 끝에 내가 찾은 가장 좋은 설명은 Question of the month : 1.4.1 Garbage collection algorithms, January 29th, 2003
젊은 세대의 가비지 수집 알고리즘
(원본) 복사 수집기 (기본적으로 활성화). 이 수집기가 시작되면 모든 응용 프로그램 스레드가 중지되고 복사 수집은 하나의 스레드를 사용하여 진행됩니다 (멀티 CPU 시스템에 있더라도 하나의 CPU 만 의미 함). 기본적으로 JVM은 수집이 완료 될 때까지 다른 모든 것을 일시 중지하기 때문에이를 stop-the-world 수집이라고합니다.
평행 복사 수집기 (-XX하여 활성화 : UseParNewGC +). 원본 복사 수집가와 마찬가지로 이것은 세계 중지 수집가입니다. 그러나이 콜렉터는 다중 스레드에 대한 복사 콜렉션을 병렬화합니다. 이는 다중 CPU 머신에 대한 원래 단일 스레드 복사 콜렉터보다 효율적입니다 (단일 CPU 머신에는 해당되지 않음). 이 알고리즘은 원래의 단일 스레드 복사 수집기와 비교할 때 사용 가능한 CPU 수와 동일한 요소로 잠재적으로 젊은 세대 수집 속도를 높입니다.
평행 소기 컬렉터 (-XX을 사용하여 활성화 : UseParallelGC). 이것은 이전의 병렬 복사 수집기와 비슷하지만 알고리즘은 다중 CPU 시스템에서 기가 바이트 힙 (10GB 이상)에 맞게 조정됩니다. 이 수집 알고리즘은 일시 중지를 최소화하면서 처리량을 최대화하도록 설계되었습니다. 힙 공간의 크기를 자동으로 조정하는 선택적 조정 조정 정책이 있습니다. 이 수집기를 사용하는 경우 이전 세대의 원래 마크 스윕 수집기 만 사용할 수 있습니다 (즉, 최신 이전 세대 동시 수집기는이 젊은 세대 수집기와 함께 작동 할 수 없음).
이 정보에서 (CMS 협력을 제외하고) 주요 차이점은 UseParallelGC가 인체 공학 을 지원 하는 반면 UseParNewGC는 지원 하지 않는다는 것입니다.
UseParNewGC 젊은 세대 복사 수집기의 병렬 버전이 동시 수집기와 함께 사용됩니다 (즉, 명령 줄에서 -XX : + UseConcMarkSweepGC가 사용되는 경우 명령 줄에서 명시 적으로 설정되지 않은 경우 UseParNewGC 플래그도 true로 설정 됨) ).
이해하는 가장 쉬운 방법은 Alexey Ragozin이 만든 가비지 수집 알고리즘의 조합 일 것입니다.
결론:
-XX:-UseParallelGC
.
-XX:+UseParallelGC
최신 JVM에 대해 젊고 오래된 GC 모두에 병렬 GC를 사용하게됩니다. 참조 bugs.openjdk.java.net/browse/...
UseParNewGC는 일반적으로 "병렬 젊은 세대 수집기"로 알려진 병렬 가비지 수집기 (-XX : + UseParallelGC)와 모든면에서 동일합니다. 단, 더 정교하고 효율적입니다. 또한 "concurrent low pause collector"와 함께 사용할 수 있습니다.
자세한 내용은 Java GC FAQ , 질문 22를 참조하십시오.
UseParNewGC에는 몇 가지 알려진 버그가 있습니다.
-XX : + UseParNewGC를 -XX : + UseConcMarkSweepGC와 함께 사용하면 -XX : + UseParallelGC에 비해 부 GC의 일시 중지 시간이 더 길어집니다.
이는 Young에서 Old Generation으로 개체를 승격하려면이 개체의 주소를 찾기 위해 Best-Fit 알고리즘 (구세대 조각화로 인해)을 실행해야하기 때문입니다.
-XX : + UseParallelGC를 사용할 때는 이러한 알고리즘을 실행할 필요가 없습니다. + UseParallelGC는 MarkandCompact Collector로만 구성 할 수 있으며이 경우에는 조각화가 없습니다.