[java] -XX : + UseParallelGC와 -XX ​​: + UseParNewGC의 차이점

젊은 세대의 가비지 수집을위한 알고리즘입니다.

두 번째 것 (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는 지원 하지 않는다는 것입니다.


답변

병렬 GC

  • XX : + UseParallelGC 청소를 위해 병렬 가비지 수집을 사용합니다. (1.4.1에 도입 됨)
  • XX : + UseParallelOldGC 전체 컬렉션에 대해 병렬 가비지 컬렉션을 사용합니다. 이 옵션을 활성화하면 -XX : + UseParallelGC가 자동으로 설정됩니다. (5.0 업데이트 6에 도입 됨)

UseParNewGC

UseParNewGC
젊은 세대 복사 수집기의 병렬 버전이 동시 수집기와 함께 사용됩니다 (즉, 명령 줄에서 -XX : + UseConcMarkSweepGC가 사용되는 경우 명령 줄에서 명시 적으로 설정되지 않은 경우 UseParNewGC 플래그도 true로 설정 됨) ).

이해하는 가장 쉬운 방법은 Alexey Ragozin이 만든 가비지 수집 알고리즘의 조합 일 것입니다.

결론:

  1. YOUNG 세대 에만 병렬 수집 방법이 필요한 경우 -XX : + UseParallelGC를 적용하고 , ( 그러나 여전히) OLD 생성 수집 으로 serial-mark-sweep 방법을 사용합니다.
  2. YOUNG 생성 (-XX : + UseParallelGC 자동 설정) OLD 생성 수집에 대한 병렬 수집 방법이 필요한 경우 -XX : + UseParallelOldGC 적용
  3. 적용 -XX : + UseParNewGC 및 -XX : + UseConcMarkSweepGC 당신이 이상의 병렬 수집 방법이 필요한 젊은 세대 이상 컬렉션으로 CMS 방법을 필요로 OLD 차세대 메모리
  4. + UseParallelGC 또는 -XX : -XX와 + UseParallelOldGC : 동시에 + UseConcMarkSweepGC, 당신의 -XX이 필요한 이유는 다음과 같습니다 + UseParNewGC을 달리 -XX을 사용하여 CMS와 결합 될 : + UseSerialGC 명시 적으로 당신은 -XX 적용 할 수 없습니다 또는 -XX를 : 젊은 세대를 상대로 시리얼 방식을 사용하고 싶다면 ParNewGC를 사용하세요.


답변

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로만 구성 할 수 있으며이 경우에는 조각화가 없습니다.


답변