호출 트리는 JProfiler가 기록한 실제 호출 스택을 보여줍니다. 호출 트리를 분석할 때 트리를 더 쉽게 해석할 수 있도록 적용할 수 있는 몇 가지 변환이 있습니다. 이러한 변환은 시간이 많이 걸릴 수 있으며 호출 트리 뷰의 기능과 호환되지 않는 방식으로 출력 형식을 변경하므로, 분석 결과가 포함된 새 뷰가 생성됩니다.
이러한 분석을 수행하려면 호출 트리 뷰에서 노드를 선택하고 툴바나 컨텍스트 메뉴에서 호출 트리 분석 작업 중 하나를 선택하십시오.
호출 트리 뷰 아래에 중첩된 뷰가 생성됩니다. 동일한 분석 작업을 다시 호출하면 해당 분석이 대체됩니다. 여러 분석 결과를 동시에 유지하려면 결과 뷰를 고정할 수 있습니다. 이 경우 동일한 유형의 다음 분석은 새 뷰를 생성합니다. 고정된 뷰의 경우 뷰 상단에 이름 변경 버튼이 표시되며, 이를 사용하여 왼쪽 뷰 선택기에 표시되는 이름을 변경할 수 있습니다.
라이브 세션에서 결과 뷰는 호출 트리와 함께 업데이트되지 않으며 분석이 수행된 시점의 데이터를 표시합니다. 현재 데이터에 대해 분석을 다시 계산하려면 다시 로드 작업을 사용하십시오. 자동 업데이트가 비활성화된 할당 트리처럼 호출 트리 자체를 다시 계산해야 하는 경우에도 다시 로드 작업이 이를 처리합니다.
호출 트리 스냅샷
"Create Call Tree Snapshot" 분석은 단순히 현재 호출 트리의 정적 복사본을 생성합니다. 이는 JProfiler 스냅샷을 저장하고 열지 않고도 서로 다른 사용 사례를 비교하는 데 유용합니다. 또한 호출 트리가 계속 기록되는 동안에도 동결된 복사본으로 작업할 수 있는 방법을 제공합니다.
"Create Call Tree Snapshot" 분석은 "CPU Views" 섹션의 "Call tree" 뷰에서만 사용할 수 있습니다. 호출 트리 스냅샷 뷰를 고정하면 여러 호출 트리 스냅샷을 동시에 유지할 수 있습니다. 다른 분석과 달리 호출 트리 스냅샷은 별도의 데이터 집합을 구성하므로 JProfiler 스냅샷에 저장됩니다.
호출 트리 뷰에서 사용할 수 있는 호출 트리 분석 외에도 호출 트리 스냅샷에는 "CPU views" 섹션의 "Hot spots" 뷰와 유사하게 상위 뷰의 핫스팟을 계산하는 "Calculate Hot Spots" 작업이 있습니다. 호출 트리 스냅샷 뷰 아래에 중첩된 뷰에서 접근할 수 있는 모든 분석은 최상위 호출 트리 뷰의 데이터가 아닌 상위 호출 트리 스냅샷의 데이터로 작동합니다.
재귀 축소
재귀를 사용하는 프로그래밍 스타일은 분석하기 어려운 호출 트리를 만듭니다. "Collapse Recursions" 호출 트리 분석은 모든 재귀가 접힌 호출 트리를 계산합니다. 호출 트리에서 현재 선택 항목의 부모 노드가 분석을 위한 호출 트리 루트 역할을 합니다. 전체 호출 트리를 분석하려면 최상위 노드 중 하나를 선택하십시오.
동일한 메서드가 호출 스택의 상위에서 이미 호출된 경우 재귀가 감지됩니다. 이 경우 서브트리가 호출 트리에서 제거되고 해당 메서드의 첫 번째 호출 위치에 다시 연결됩니다. 그런 다음 호출 트리의 해당 노드 앞에 툴팁에 재귀 횟수를 표시하는 아이콘이 추가됩니다. 해당 노드 아래에서는 서로 다른 깊이의 스택이 병합됩니다. 병합된 스택의 수도 툴팁에 표시됩니다. 축소된 총 재귀 횟수는 원래 호출 트리에 설정된 호출 트리 매개변수 정보 위의 헤더에 표시됩니다.
단순 재귀의 경우 병합된 스택 수는 재귀 수 더하기 1입니다. 따라서 재귀 툴팁에 "1 recursion"이라고 표시된 노드는 재귀 툴팁에 "2 merged stacks"라고 표시된 노드가 있는 트리를 포함하게 됩니다. 더 복잡한 경우에는 재귀가 중첩되어 겹치는 병합 호출 트리를 생성하므로 스택 깊이에 따라 병합된 스택 수가 달라집니다.
상위로 병합하기 위해 서브트리가 호출 트리에서 제거되는 지점에는 특수한 "moved nodes" 플레이스홀더가 삽입됩니다.
누적 나가는 호출 분석
호출 트리에서는 선택한 메서드의 나가는 호출을 볼 수 있지만, 해당 메서드가 호출된 특정 호출 스택 하나에 대해서만 볼 수 있습니다. 관심 있는 동일한 메서드가 서로 다른 호출 스택에서 호출되었을 수 있으므로, 더 나은 통계를 얻기 위해 이러한 모든 호출의 누적 호출 트리를 분석하는 것이 유용한 경우가 많습니다. "Calculate cumulated outgoing calls" 분석은 메서드가 어떻게 호출되었는지와 관계없이 선택한 메서드의 모든 나가는 호출을 합산한 호출 트리를 보여줍니다.
JProfiler는 선택한 메서드에 대해 재귀 호출을 고려하지 않고 모든 최상위 호출을 수집하여 결과 트리에 누적합니다. 헤더에는 해당 프로세스에서 이러한 최상위 호출 사이트가 몇 개 합산되었는지가 표시됩니다.
뷰 상단에는 "Collapse Recursions" 분석과 유사하게 결과 트리에서 재귀를 축소할 수 있는 체크박스가 있습니다. 재귀를 축소하면 최상위 노드와 첫 번째 레벨의 나가는 호출이 메서드 호출 그래프와 동일한 수치를 표시합니다.
백트레이스 계산
"Calculate backtraces" 분석은 "Calculate cumulated outgoing calls" 분석을 보완합니다. 후자와 마찬가지로 재귀 호출을 고려하지 않고 선택한 메서드의 모든 최상위 호출을 합산합니다. 그러나 나가는 호출을 표시하는 대신 선택한 메서드의 호출에 기여하는 백트레이스를 표시합니다. 호출은 가장 깊은 노드에서 시작하여 상단의 선택한 메서드를 향해 진행됩니다.
이 분석은 기본적으로 선택한 메서드에 대해 자체 시간 대신 총 시간을 합산한다는 점과, 핫스팟 뷰는 자체 시간이 전체 시간의 상당 부분을 차지하는 메서드만 표시한다는 점을 제외하면 핫스팟 뷰와 유사합니다. 뷰 상단에는 Summation mode라는 라디오 버튼 그룹이 있어 Self times로 설정할 수 있습니다. 이를 선택하면 선택한 메서드의 합산된 값이 핫스팟 뷰의 기본 모드 값과 일치하게 됩니다.
백트레이스에서 백트레이스 노드의 호출 횟수와 시간은 선택한 메서드와만 관련이 있습니다. 특정 호출 스택을 따른 호출이 선택한 메서드의 값에 얼마나 기여했는지를 보여줍니다. "Calculate cumulated outgoing calls" 분석과 유사하게 재귀를 축소할 수 있으며, 백트레이스의 첫 번째 레벨은 메서드 호출 그래프의 들어오는 호출과 동일합니다.
호출 그래프에서의 호출 트리 분석
호출 그래프에서는 각 메서드가 고유한 반면, 호출 트리에서는 메서드가 여러 호출 스택에 나타날 수 있습니다. 선택한 단일 메서드에 대해 "Calculate Cumulated Outgoing Calls" 및 "Calculate Backtraces To Selected Method" 분석은 호출 트리와 호출 그래프의 관점을 연결해 줍니다. 이 분석들은 선택한 메서드를 중앙에 배치하고 나가는 호출과 들어오는 호출을 트리 형태로 보여줍니다. Show Call Graph 작업을 사용하면 언제든지 전체 그래프로 전환할 수 있습니다.
때로는 반대 방향으로 관점을 전환하여 그래프에서 트리 뷰로 변경하고 싶을 수 있습니다. 호출 그래프에서 작업할 때 호출 트리에서와 동일한 호출 트리 분석을 사용하여 그래프에서 선택한 임의의 노드에 대해 누적 나가는 호출 및 백트레이스를 트리 형태로 표시할 수 있습니다.
IntelliJ IDEA 통합에서는 에디터의 거터(gutter)에 표시되는 호출 그래프에 이러한 트리를 직접 표시하는 작업이 포함되어 있습니다.
할당에 대한 클래스 표시
이전 호출 트리 분석과 약간 다른 것은 할당 호출 트리 및 할당 핫스팟 뷰의 "Show classes" 분석입니다. 이는 호출 트리를 다른 트리로 변환하지 않고 할당된 모든 클래스가 포함된 테이블을 표시합니다. 결과 뷰는 기록된 객체 뷰와 유사하지만 특정 할당 지점으로 제한됩니다.
호출 트리를 표시하는 분석 결과 뷰에서는 "Calculate cumulated outgoing calls" 및 "Calculate backtraces to selected method" 분석을 모두 사용할 수 있습니다. 이를 호출하면 독립적인 매개변수를 가진 새로운 최상위 분석이 생성됩니다. 이전 분석 결과 뷰에서의 모든 호출 트리 제거 사항은 새 최상위 분석에 반영되지 않습니다.
반면 Show Classes 작업은 호출 트리 분석 결과 뷰에서 사용할 때 새 최상위 분석을 생성하지 않습니다. 대신 원본 뷰의 두 레벨 아래에 중첩된 분석을 생성합니다.

















