JProfiler ヘルプ

呼び出しツリーの分析

呼び出しツリー機能の詳細

呼び出しツリーには、JProfilerが記録した実際の呼び出しスタックが表示されます。呼び出しツリーを分析する際、解釈しやすくするために呼び出しツリーに対して適用できる変換がいくつかあります。これらの変換には時間がかかる場合があり、呼び出しツリービューの機能と互換性のない形式に出力フォーマットが変更されるため、分析結果を表示する新しいビューが作成されます。

このような分析を実行するには、呼び出しツリービューでノードを選択し、ツールバーまたはコンテキストメニューから呼び出しツリー分析アクションのいずれかを選択します。

呼び出しツリービューの下にネストされたビューが作成されます。同じ分析アクションを再度実行すると、分析結果が置き換えられます。複数の分析結果を同時に保持したい場合は、結果ビューをピン留めできます。その場合、同じタイプの次の分析を実行すると新しいビューが作成されます。ピン留めされたビューでは、ビュー上部に名前変更ボタンが表示され、左側のビューセレクターに表示される名前を変更できます。

ライブセッションでは、結果ビューは呼び出しツリーと連動して更新されず、分析が行われた時点のデータを表示します。現在のデータに対して分析を再計算するには、リロードアクションを使用します。自動更新が無効になっている割り当てツリーのように、呼び出しツリー自体を再計算する必要がある場合も、リロードアクションによって処理されます。

呼び出しツリースナップショット

「呼び出しツリースナップショットの作成」分析は、単に現在の呼び出しツリーの静的なコピーを作成します。これは、JProfilerスナップショットを保存して開くことなく、異なるユースケースを比較するのに役立ちます。また、記録が進行中であっても、固定された呼び出しツリーのコピーを操作する方法を提供します。

「呼び出しツリースナップショットの作成」分析は、「CPUビュー」セクションの「呼び出しツリー」ビューでのみ利用できます。呼び出しツリースナップショットビューをピン留めすると、複数の呼び出しツリースナップショットを同時に保持できます。他の分析とは異なり、呼び出しツリースナップショットは独立したデータセットを構成するため、JProfilerスナップショット内に保存されます。

呼び出しツリービューで利用可能な呼び出しツリー分析に加えて、呼び出しツリースナップショットには、「CPUビュー」セクションの「ホットスポット」ビューと同様に、親ビューのホットスポットを計算する「ホットスポットの計算」アクションもあります。呼び出しツリースナップショットビューの下にネストされたビューからアクセスできるすべての分析は、最上位の呼び出しツリービューのデータではなく、親の呼び出しツリースナップショットのデータを対象に処理を行います。

再帰の折りたたみ

再帰を利用するプログラミングスタイルは、分析が困難な呼び出しツリーをもたらします。「再帰の折りたたみ」呼び出しツリー分析は、すべての再帰が折りたたまれた呼び出しツリーを計算します。呼び出しツリー内の現在の選択箇所の親ノードが、分析の呼び出しツリーのルートとして機能します。呼び出しツリー全体を分析するには、最上位ノードのいずれかを選択します。

呼び出しスタックの上位で同じメソッドがすでに呼び出されていた場合に、再帰が検出されます。その場合、サブツリーは呼び出しツリーから削除され、そのメソッドの最初の呼び出しに再び結合されます。呼び出しツリー内のそのノードにはアイコンが先頭に付加され、そのツールチップに再帰の回数が表示されます。そのノードの下では、異なる深さからのスタックがマージされます。マージされたスタックの数もツールチップに表示されます。折りたたまれた再帰の総数は、元の呼び出しツリーに設定されていた呼び出しツリーパラメータに関する情報の上に、ヘッダーとして表示されます。

単純な再帰の場合、マージされたスタックの数は再帰の回数プラス1になります。したがって、再帰ツールチップに「1 recursion」と表示されているノードには、再帰ツールチップに「2 merged stacks」と表示されるノードを含むツリーが含まれます。より複雑なケースでは、再帰がネストされて重複するマージ呼び出しツリーが生成されるため、マージされたスタックの数はスタックの深さによって異なります。

サブツリーが呼び出しツリーから削除されて上位でマージされる位置には、特別な  「moved nodes」プレースホルダーが挿入されます。

累積発信呼び出しの分析

呼び出しツリーでは、選択したメソッドの発信呼び出しを確認できますが、それはそのメソッドが呼び出された特定の呼び出しスタックについてのみです。注目しているメソッドが異なる呼び出しスタックで呼び出されている可能性もあり、より優れた統計情報を得るために、それらすべての呼び出しを累積した呼び出しツリーを分析すると役立つことがよくあります。「累積発信呼び出しの計算」分析では、メソッドがどのように呼び出されたかに関係なく、選択したメソッドのすべての発信呼び出しを合計した呼び出しツリーが表示されます。

選択したメソッドについて、JProfilerは再帰的な呼び出しを考慮せずにそのすべての最上位呼び出しを収集し、結果ツリーで累積します。ヘッダーには、そのプロセスでいくつの最上位呼び出し元サイトが合計されたかが表示されます。

ビューの上部には、「再帰の折りたたみ」分析と同様に、結果ツリー内の再帰を折りたたむことができるチェックボックスがあります。再帰が折りたたまれている場合、最上位ノードおよび発信呼び出しの第1レベルには、メソッドの呼び出しグラフと同じ数値が表示されます。

バックトレースの計算

「バックトレースの計算」分析は、「累積発信呼び出しの計算」分析を補完するものです。後者と同様に、再帰的な呼び出しを考慮せずに選択したメソッドのすべての最上位呼び出しを合計します。ただし、発信呼び出しを表示する代わりに、選択したメソッドの呼び出しに寄与したバックトレースを表示します。呼び出しは最も深いノードから発生し、最上位にある選択されたメソッドに向かって進みます。

この分析はホットスポットビューに似ていますが、デフォルトでは選択したメソッドの自己時間の代わりに合計時間を合計する点と、ホットスポットビューでは自己時間が合計時間の大部分を占めるメソッドのみを表示する点が異なります。ビューの上部には集計モードというラベルのラジオボタングループがあり、これを自己時間に設定できます。その選択を行うと、選択したメソッドの集計値はホットスポットビューのデフォルトモードの値と一致します。

バックトレースでは、バックトレースノードの呼び出し回数と時間は、選択したメソッドにのみ関連付けられます。これらは、その特定の呼び出しスタックに沿った呼び出しが、選択したメソッドの値にどの程度寄与したかを示します。「累積発信呼び出しの計算」分析と同様に、再帰を折りたたむことができ、バックトレースの第1レベルはメソッド呼び出しグラフの着信呼び出しに相当します。

呼び出しグラフでの呼び出しツリー分析

呼び出しグラフでは各メソッドは一意ですが、呼び出しツリーではメソッドが複数の呼び出しスタックに出現することがあります。選択した1つのメソッドに対して、「累積発信呼び出しの計算」分析と「選択したメソッドへのバックトレースの計算」分析は、呼び出しツリーと呼び出しグラフの視点をつなぐ架け橋となります。これらは選択したメソッドを中心とし、発信および着信呼び出しをツリーとして表示します。呼び出しグラフを表示アクションを使用すると、いつでも完全なグラフに切り替えることができます。

ときには、逆の方向に視点を切り替えて、グラフからツリービューに変更したい場合もあります。呼び出しグラフで作業しているときは、呼び出しツリーと同じ呼び出しツリー分析を使用して、グラフ内で選択した任意のノードの累積発信呼び出しおよびバックトレースをツリーとして表示できます。

IntelliJ IDEA連携では、エディタのガターに表示される呼び出しグラフに、これらのツリーを直接表示するアクションが含まれています。

割り当てのクラスの表示

これまでの呼び出しツリー分析と少し異なるのが、割り当て呼び出しツリーおよび割り当てホットスポットビューにある「クラスを表示」分析です。これは呼び出しツリーを別のツリーに変換するのではなく、すべての割り当て済みクラスのテーブルを表示します。結果ビューは記録されたオブジェクトビューに似ていますが、特定の割り当て箇所に限定されています。

呼び出しツリーを表示する分析結果ビューでは、「累積発信呼び出しの計算」分析と「選択したメソッドへのバックトレースの計算」分析の両方を利用できます。これらを実行すると、独立したパラメータを持つ新しい最上位の分析が作成されます。以前の分析結果ビューで行われた呼び出しツリーの削除は、新しい最上位の分析には反映されません。

一方、クラスを表示アクションを呼び出しツリー分析結果ビューから使用した場合、新しい最上位の分析は作成されません。代わりに、元のビューの2レベル下にネストされた分析が作成されます。