호출 트리 분석
호출 트리는 JProfiler가 기록한 실제 호출 스택을 보여줍니다. 호출 트리를 분석할 때, 해석을 용이하게 하기 위해 호출 트리에 적용할 수 있는 몇 가지 변환이 있습니다. 이러한 변환은 시간이 많이 소요될 수 있으며 호출 트리 뷰의 기능과 호환되지 않는 방식으로 출력 형식을 변경하므로 분석 결과가 포함된 새로운 뷰가 생성됩니다.
이러한 분석을 수행하려면 호출 트리 뷰에서 노드를 선택하고 도구 모음 또는 컨텍스트 메뉴에서 호출 트리 분석 작업 중 하나를 선택하십시오.
호출 트리 뷰 아래에 중첩된 뷰가 생성됩니다. 동일한 분석 작업을 다시 호출하면 분석이 대체됩니다. 여러 분석 결과를 동시에 유지하려면 결과 뷰를 고정할 수 있습니다. 이 경우 동일한 유형의 다음 분석은 새로운 뷰를 생성합니다. 고정된 뷰의 경우, 왼쪽의 뷰 선택기에 표시되는 이름을 변경할 수 있는 이름 변경 버튼이 뷰 상단에 표시됩니다.
라이브 세션에서는 결과 뷰가 호출 트리와 함께 업데이트되지 않으며 분석이 수행된 시점의 데이터를 표시합니다. 현재 데이터를 위한 분석을 다시 계산하려면 다시 로드 작업을 사용하십시오. 할당 트리에서 자동 업데이트가 비활성화된 경우와 같이 호출 트리 자체를 다시 계산해야 하는 경우에도 다시 로드 작업이 이를 처리합니다.
호출 트리 스냅샷
"호출 트리 스냅샷 생성" 분석은 현재 호출 트리의 정적 복사본을 단순히 생성합니다. 이는 JProfiler 스냅샷을 저장하고 열지 않고도 다양한 사용 사례를 비교하는 데 유용합니다. 또한 호출 트리가 여전히 기록 중일 때 고정된 복사본으로 작업할 수 있는 방법을 제공합니다.
"호출 트리 스냅샷 생성" 분석은 "CPU 뷰" 섹션의 "호출 트리" 뷰에서만 사용할 수 있습니다. 호출 트리 스냅샷 뷰를 고정하면 여러 호출 트리 스냅샷을 동시에 가질 수 있습니다. 다른 분석과 달리 호출 트리 스냅샷은 별도의 데이터 집합을 구성하기 때문에 JProfiler 스냅샷에 저장됩니다.
호출 트리 뷰에서 사용할 수 있는 호출 트리 분석 외에도 호출 트리 스냅샷에는 부모 뷰의 핫스팟을 계산하는 "핫스팟 계산" 작업이 있습니다. 이는 "CPU 뷰" 섹션의 "핫스팟" 뷰와 유사합니다. 호출 트리 스냅샷 뷰 아래에 중첩된 뷰에서 액세스할 수 있는 모든 분석은 최상위 호출 트리 뷰의 데이터가 아닌 부모 호출 트리 스냅샷의 데이터로 작업합니다.
재귀 축소
재귀를 사용하는 프로그래밍 스타일은 분석하기 어려운 호출 트리를 초래합니다. "재귀 축소" 호출 트리 분석은 모든 재귀가 접힌 호출 트리를 계산합니다. 호출 트리에서 현재 선택한 항목의 부모 노드는 분석을 위한 호출 트리 루트 역할을 합니다. 전체 호출 트리를 분석하려면 최상위 노드 중 하나를 선택하십시오.
동일한 메서드가 호출 스택 상단에서 이미 호출된 경우 재귀가 감지됩니다. 이 경우 하위 트리가 호출 트리에서 제거되고 해당 메서드의 첫 번째 호출로 다시 연결됩니다. 그런 다음 호출 트리의 해당 노드는 재귀 횟수를 보여주는 도구 팁이 있는 아이콘으로 접두사가 붙습니다. 해당 노드 아래에서 서로 다른 깊이의 스택이 병합됩니다. 병합된 스택의 수는 도구 팁에도 표시됩니다. 접힌 재귀의 총 수는 원래 호출 트리에 대해 설정된 호출 트리 매개변수 정보 위의 헤더에 표시됩니다.
간단한 재귀의 경우 병합된 스택의 수는 재귀 횟수에 1을 더한 값입니다. 따라서 재귀 도구 팁에 "1 재귀"가 표시된 노드는 재귀 도구 팁에 "2 병합된 스택"이 표시된 노드를 포함하는 트리를 포함합니다. 더 복잡한 경우에는 재귀가 중첩되어 겹치는 병합 호출 트리를 생성하므로 병합된 스택의 수는 스택 깊이에 따라 다릅니다.
하위 트리가 호출 트리에서 제거되어 상위로 병합되는 지점에서 특별한
누적된 아웃고잉 호출 분석
호출 트리에서 선택한 메서드에 대한 아웃고잉 호출을 볼 수 있지만 해당 메서드가 호출된 특정 호출 스택에 대해서만 볼 수 있습니다. 관심 있는 동일한 메서드가 다른 호출 스택에서 호출되었을 수 있으며, 더 나은 통계를 얻기 위해 이러한 모든 호출의 누적된 호출 트리를 분석하는 것이 종종 유용합니다. "누적된 아웃고잉 호출 계산" 분석은 메서드가 호출된 방식에 관계없이 선택한 메서드의 모든 아웃고잉 호출을 합산한 호출 트리를 보여줍니다.
선택한 메서드에 대해 JProfiler는 재귀 호출을 고려하지 않고 모든 최상위 호출을 수집하고 결과 트리에 누적합니다. 헤더에는 해당 프로세스에서 합산된 최상위 호출 사이트의 수가 표시됩니다.
뷰 상단에는 결과 트리에서 재귀를 축소할 수 있는 체크박스가 있으며, 이는 "재귀 축소" 분석과 유사합니다. 재귀가 축소되면 최상위 노드와 아웃고잉 호출의 첫 번째 레벨은 메서드 호출 그래프와 동일한 숫자를 표시합니다.
백트레이스 계산
"백트레이스 계산" 분석은 "누적된 아웃고잉 호출 계산" 분석을 보완합니다. 후자는 재귀 호출을 고려하지 않고 선택한 메서드의 모든 최상위 호출을 합산합니다. 그러나 아웃고잉 호출을 보여주는 대신 선택한 메서드의 호출에 기여하는 백트레이스를 보여줍니다. 호출은 가장 깊은 노드에서 시작하여 선택한 메서드로 진행됩니다.
이 분석은 핫스팟 뷰와 유사하지만 기본적으로 선택한 메서드의 자체 시간 대신 총 시간을 합산하며, 핫스팟 뷰는 자체 시간이 총 시간의 중요한 부분인 메서드만 표시합니다. 뷰 상단에는 합산 모드라는 라디오 버튼 그룹이 있으며 자체 시간으로 설정할 수 있습니다. 이 선택으로 선택한 메서드의 합산 값은 핫스팟 뷰의 기본 모드와 일치합니다.
백트레이스에서 백트레이스 노드의 호출 횟수와 시간은 선택한 메서드와만 관련이 있습니다. 특정 호출 스택을 따라 호출이 선택한 메서드의 값에 얼마나 기여했는지를 보여줍니다. "누적된 아웃고잉 호출 계산" 분석과 유사하게 재귀를 축소할 수 있으며 백트레이스의 첫 번째 레벨은 메서드 호출 그래프의 인커밍 호출과 동일합니다.
호출 그래프에서 호출 트리 분석
호출 그래프에서는 각 메서드가 고유하지만 호출 트리에서는 메서드가 여러 호출 스택에 나타날 수 있습니다. 선택한 메서드 하나에 대해 "누적된 아웃고잉 호출 계산" 및 "백트레이스 계산" 분석은 호출 트리와 호출 그래프의 관점 사이의 다리 역할을 합니다. 선택한 메서드를 중심에 두고 아웃고잉 및 인커밍 호출을 트리로 보여줍니다. 호출 그래프 표시 작업을 통해 언제든지 전체 그래프로 전환할 수 있습니다.
때로는 반대 방향으로 관점을 전환하여 그래프에서 트리 뷰로 변경하고 싶을 때가 있습니다. 호출 그래프에서 작업할 때 그래프의 선택한 노드에 대해 호출 그래프와 동일한 호출 트리 분석을 사용하여 누적된 아웃고잉 호출과 백트레이스를 트리로 표시할 수 있습니다.
IntelliJ IDEA 통합에서는 편집기의 구석에 표시되는 호출 그래프에 이러한 트리를 직접 표시하는 작업이 포함되어 있습니다.
할당을 위한 클래스 표시
이전 호출 트리 분석과 약간 다른 점은 할당 호출 트리와 할당 핫스팟 뷰에서 "클래스 표시" 분석입니다. 이는 호출 트리를 다른 트리로 변환하지 않고 모든 할당된 클래스를 포함하는 테이블을 표시합니다. 결과 뷰는 기록된 객체 뷰와 유사하지만 특정 할당 지점에 제한됩니다.
호출 트리를 보여주는 분석 결과 뷰에서는 "누적된 아웃고잉 호출 계산" 및 "선택한 메서드로의 백트레이스 계산" 분석을 사용할 수 있습니다. 이를 호출하면 독립적인 매개변수를 가진 새로운 최상위 분석이 생성됩니다. 이전 분석 결과 뷰에서의 호출 트리 제거는 새로운 최상위 분석에 반영되지 않습니다.
반면 클래스 표시 작업은 호출 트리 분석 결과 뷰에서 사용될 때 새로운 최상위 분석을 생성하지 않습니다. 대신 원래 뷰에서 두 레벨 아래에 중첩된 분석을 생성합니다.