呼び出しツリー分析
呼び出しツリーは、JProfilerが記録した実際の呼び出しスタックを表示します。 呼び出しツリーを分析する際、解釈を容易にするために呼び出しツリーに適用できるいくつかの変換があります。 これらの変換は時間がかかり、呼び出しツリービューの機能と互換性のない形式に出力を変更するため、 分析結果の新しいビューが作成されます。
このような分析を行うには、呼び出しツリービューでノードを選択し、ツールバーまたはコンテキストメニューから 呼び出しツリー分析アクションのいずれかを選択します。
呼び出しツリービューの下にネストされたビューが作成されます。同じ分析アクションを再度実行すると、 分析が置き換えられます。同時に複数の分析結果を保持するには、結果ビューをピン留めすることができます。 その場合、同じタイプの次の分析は新しいビューを作成します。ピン留めされたビューでは、ビューセレクタの 左側に表示される名前を変更するためのリネームボタンがビューの上部に表示されます。
ライブセッションでは、結果ビューは呼び出しツリーと共に更新されず、分析が行われた時点のデータを表示します。 現在のデータに対して分析を再計算するには、リロードアクションを使用します。割り当てツリーで自動更新が 無効になっている場合のように、呼び出しツリー自体を再計算する必要がある場合も、リロードアクションが それを処理します。
呼び出しツリースナップショット
「呼び出しツリースナップショットの作成」分析は、現在の呼び出しツリーの静的コピーを作成するだけです。 これは、JProfilerスナップショットを保存して開くことなく、異なるユースケースを比較するのに便利です。 また、記録中の呼び出しツリーの凍結コピーを操作する方法を提供します。
「呼び出しツリースナップショットの作成」分析は、「CPUビュー」セクションの「呼び出しツリー」ビューでのみ 利用可能です。呼び出しツリースナップショットビューをピン留めすると、同時に複数の呼び出しツリースナップショットを 持つことができます。他の分析とは異なり、呼び出しツリースナップショットは独立したデータセットを構成するため、 JProfilerスナップショットに保存されます。
呼び出しツリービューで利用可能な呼び出しツリー分析に加えて、呼び出しツリースナップショットには 親ビューのホットスポットを計算する「ホットスポットの計算」アクションもあります。 「CPUビュー」セクションの「ホットスポット」ビューと同様です。呼び出しツリースナップショットビューの 下にネストされたビューからアクセス可能なすべての分析は、トップレベルの呼び出しツリービューのデータではなく、 親の呼び出しツリースナップショットのデータを使用します。
再帰の折りたたみ
再帰を利用するプログラミングスタイルは、分析が難しい呼び出しツリーをもたらします。 「再帰の折りたたみ」呼び出しツリー分析は、すべての再帰が折りたたまれた呼び出しツリーを計算します。 呼び出しツリーで現在選択されているノードの親ノードが、分析のための 呼び出しツリーのルートとして機能します。 呼び出しツリー全体を分析するには、トップレベルのノードのいずれかを選択します。
再帰は、同じメソッドが呼び出しスタックの上位で既に呼び出された場合に検出されます。 その場合、サブツリーは呼び出しツリーから削除され、そのメソッドの最初の呼び出しに戻されます。 そのノードは、ツールチップに再帰の数を示すアイコンでプレフィックスされます。 そのノードの下では、異なる深さからのスタックがマージされます。マージされたスタックの数も ツールチップに表示されます。折りたたまれた再帰の総数は、元の呼び出しツリーに設定された 呼び出しツリーパラメータに関する情報の上にあるヘッダーに表示されます。
単純な再帰の場合、マージされたスタックの数は再帰の数プラス1です。したがって、 再帰ツールチップに「1再帰」と表示されるノードは、その再帰ツールチップに「2マージスタック」と 表示されるノードを含むツリーを持ちます。より複雑なケースでは、再帰がネストされ、 重複するマージされた呼び出しツリーを生成するため、スタックの深さごとにマージされたスタックの数が異なります。
サブツリーが呼び出しツリーから削除されて上位でマージされるポイントで、特別な
累積されたアウトゴーイングコールの分析
呼び出しツリーでは、選択されたメソッドのアウトゴーイングコールを見ることができますが、 そのメソッドが呼び出された特定の呼び出しスタックに対してのみです。 同じ関心のあるメソッドが異なる呼び出しスタックで呼び出された可能性があり、 より良い統計を得るためにそれらの呼び出しのすべての累積された呼び出しツリーを分析することが しばしば有用です。「累積されたアウトゴーイングコールの計算」分析は、選択されたメソッドの すべてのアウトゴーイングコールを合計した呼び出しツリーを表示します。
選択されたメソッドについて、JProfilerは再帰呼び出しを考慮せずにそのトップレベルの呼び出しをすべて収集し、 結果ツリーに累積します。ヘッダーには、そのプロセスで合計されたトップレベルの呼び出し元サイトの数が 表示されます。
ビューの上部には、結果ツリーで再帰を折りたたむことができるチェックボックスがあります。 これは「再帰の折りたたみ」分析と似ています。再帰が折りたたまれると、トップレベルノードと アウトゴーイングコールの最初のレベルは、メソッドコールグラフと同じ数値を示します。
バックトレースの計算
「バックトレースの計算」分析は、「累積されたアウトゴーイングコールの計算」分析を補完します。 後者と同様に、再帰呼び出しを考慮せずに選択されたメソッドのすべてのトップレベル呼び出しを合計します。 ただし、アウトゴーイングコールを表示する代わりに、選択されたメソッドの呼び出しに寄与する バックトレースを表示します。呼び出しは最も深いノードから始まり、選択されたメソッドに向かって進行します。
この分析はホットスポットビューに似ていますが、デフォルトでは選択されたメソッドの自己時間ではなく 合計時間を合計し、ホットスポットビューは合計時間の重要な部分を占めるメソッドのみを表示します。 ビューの上部には集計モードとラベル付けされたラジオボタングループがあり、 自己時間に設定できます。その選択で、選択されたメソッドの合計値はホットスポットビューの デフォルトモードと一致します。
バックトレースでは、バックトレースノードの呼び出し回数と時間は選択されたメソッドにのみ関連しています。 それらは、その特定の呼び出しスタックに沿った呼び出しが選択されたメソッドの値にどれだけ寄与したかを示します。 「累積されたアウトゴーイングコールの計算」分析と同様に、再帰を折りたたむことができ、 バックトレースの最初のレベルはメソッドコールグラフのインカミングコールと同等です。
呼び出しグラフでの呼び出しツリー分析
呼び出しグラフでは、各メソッドは一意ですが、呼び出しツリーではメソッドが複数の呼び出しスタックで 発生することがあります。選択されたメソッドに対して、「累積されたアウトゴーイングコールの計算」と 「バックトレースの計算」分析は、呼び出しツリーと呼び出しグラフの視点の橋渡しをします。 それらは選択されたメソッドを中心に置き、アウトゴーイングコールとインカミングコールをツリーとして表示します。 コールグラフを表示アクションを使用すると、いつでも完全なグラフに切り替えることができます。
時には、逆の方向に視点を切り替え、グラフからツリービューに変更したいことがあります。 呼び出しグラフで作業しているとき、グラフ内の任意の選択されたノードに対して、 呼び出しツリー分析と同じ方法で累積されたアウトゴーイングコールとバックトレースをツリーとして表示できます。
IntelliJ IDEA統合では、エディタのガターに表示される呼び出しグラフには、 これらのツリーを直接表示するアクションが含まれています。
割り当てのためのクラスの表示
以前の呼び出しツリー分析とは少し異なるのは、割り当て呼び出しツリーと割り当てホットスポットビューでの 「クラスの表示」分析です。これは呼び出しツリーを別のツリーに変換するのではなく、 割り当てられたすべてのクラスを含むテーブルを表示します。結果ビューは 記録されたオブジェクトビューに似ていますが、 特定の割り当てスポットに制限されています。
呼び出しツリーを表示する分析結果ビューでは、「累積されたアウトゴーイングコールの計算」と 「選択されたメソッドへのバックトレースの計算」分析の両方が利用可能です。 それらを呼び出すと、独立したパラメータを持つ新しいトップレベル分析が作成されます。 前の分析結果ビューからの呼び出しツリーの削除は、新しいトップレベル分析には反映されません。
一方、クラスの表示アクションは、呼び出しツリー分析結果ビューから使用された場合、 新しいトップレベル分析を作成しません。代わりに、元のビューの2レベル下にネストされた分析を作成します。