2017-09-28 7 views
4

최근에는 (계산 시간과 최대 메모리가 필요한) 일부 코드를 최적화하기 위해 노력해 왔습니다. 메모리 비용을 최적화 할 잠재적 이득이 있는지를 알기 위해 JProfiler를 사용합니다. 이 고의 경우 일반적으로JProfiler에서 GC 활동 그래프를 해석하는 방법은 무엇입니까?

  • , 나는이 뾰족한의 경우 전 세계적으로
  • 그것을 줄이기 위해 시도해야한다, 나는 두 번째 상황에서 오전, 이제 중간 객체 생성

을 줄이기 위해 시도하고한다 GC Activity 그래프는 스파이크를 보여 주지만 모두 2 % 미만입니다 (아래 이미지 참조). 어떻게 이해해야합니까?

기본적으로 GC 활동 곡선의 합계/적분은 데이터를 수집하는 데 사용 된 CPU의 총 비율에 대한 추정치입니다. 그래서 여기에 최대 2 %보다 훨씬 작은 것을 의미 할 것입니다.

정확합니까? 내가 놓친 게 있니? 기본적

enter image description here

+0

이미지를 추가 할 수 있습니까? 또한 GC 활동에 대한 GC 해석을 더 자세히 보려면 ​​gc 로깅을 활성화하고 [gcviewer] (https://github.com/chewiebug/GCViewer)를 통해 실행해야합니다. – the8472

+0

이미지를 추가했습니다. gc 로깅 기능을 인식하지 못합니다. 어떻게해야합니까? –

+0

GC 로그는 전체 GC 성능에 대한 자세한 통계를 제공합니다. jprofiler는 객체 그래프 및 할당 사이트를 분석하는 데 더 적합합니다. 그래서 당신이 더 나은 통찰력을 제공 할 것입니다 gc 로그를 해석하면 집계 행동의 더 나은 인상을 원한다면. 어디에 할당되어 있는지 알고 싶다면 프로파일 러가 더 나은 선택입니다. 대답에 대해 – the8472

답변

2

내 이해는 GC 작업 곡선의 합/integrale 데이터를 수집하는 데 사용되는 CPU의 총 %의 추정치이다.

그래야합니다. 최대 2 % 여기에 현혹

최대보다 훨씬 적은 것을 의미 그래서 여기

. 샘플링 간격을 충분히 작게 만들면 GCing에 소비되는 시간 조각의 최대 100 %가됩니다. 즉, 해당 조각이 GC 일시 중지 기간보다 작은 경우입니다. 따라서 이러한 피크는 이미 더 큰 시간 조각에 대한 평균입니다.

어떻게 이해해야합니까?

애플리케이션이 GC에 많은 시간을 소비하지 않을 가능성이 있습니다. 그러나 그래프에는 비교적 적은 시간 만 표시되므로 주요 수집 또는 동시주기가 반영되지 않을 수 있습니다. JVM의 GC 로그를 해석하면 처리량뿐만 아니라 대기 시간에 신경 쓰면 더 자세한 정보를 얻을 수 있습니다. 기본적

+0

고마움. 여기에서는 하나의 핵심에 대한 분석 코드, 순수 계산을 최적화하고 있습니다. 이것은 (분산 된) 응용 프로그램에 의해 1000s라고하는 동일한 코드입니다. 나는 앱을 최적화 할 때 gc 로깅을 살펴볼 것입니다. 이상하게도 2 행동 (1st vs 2nd half)이있는 반면 그래프는 동일한 코드에 대한 반복적 인 호출을 의미합니다. 차이는 계산 결과가 아닌 결과 값만 변경해야하는 입력 임의 값입니다. –

4

내 이해는 GC 작업 곡선의 합/integrale 는 데이터를 수집하는 데 사용되는 CPU의 총 퍼센트의 추정치는 점이다. 그래서 여기에 최대 2 %보다 훨씬 적음을 의미합니다.

맞습니까?

네, 맞습니다. 임시 객체가 할당되는 곳을 찾으려면,

enter image description here

가 확인하려면 메모리 -> 할당 호출 트리를 라이브로 이동하고 생동감 모드로 "쓰레기 수집 된 객체를"선택 모든 할당 자리에 분류 또는 할당 핫 스폿을 사용하려면 "Show classes"콜 트리 분석을 사용하십시오.

enter image description here