プロファイラーのスナップショットを読む
IntelliJ プロファイラー 構成で 作成されたスナップショットは、次のモードで表示できます。
CPU 時間 – IO、ロック待機、コンテキスト切り替えなどを除く、実際の CPU 作業に対応するサンプルのサブセット。 アルゴリズムの複雑さの改善などの最適化から最大限のメリットを得ることができる、CPU 集中型のセクションを特定できます。
合計時間 – スリープ状態のスレッドのサンプルを含むすべてのサンプル。 このモードは、IO、コンテキスト切り替えオーバーヘッド、同期などを含む、知覚されるパフォーマンスと実際の実行時間を考慮できます。 これを使用すると、外部要因や最適でない同時実行によって速度が低下している可能性のあるセクションを特定できます。
メモリの割り当て – メモリ割り当てイベントに対応するサンプルのサブセット。 このモードは、プリミティブのボックス化やオブジェクトの作成などの量を最適化することで最大限のメリットを得ることができる、メモリを大量に消費するセクションを特定できます。
表示モードを切り替える
ツールウィンドウの右上隅にあるメニューを使用します。

IntelliJ IDEA はスナップショットを分析するためのいくつかのビューを提供します。
エディター内のヒント – エディターでコードの特定の行のパフォーマンスを直接評価する直感的な方法
コールツリー — コードパスと、それらが全体のCPU/メモリ使用量に占める割合を表すツリー
フレームグラフ — コードパスを、スタックフレームを視覚要素として表現することで可視化し、分析とナビゲーションを容易にするグラフィック表現
メソッドリスト—コードパスではなく、個々のメソッドの集計統計を提供するフラットビュー
タイムライン - 時間の経過に伴うスレッドのアクティビティを視覚的に表現したもの
スナップショットを移動する
デフォルトでは、ライブラリとフレームワークのメソッドは折りたたまれた状態で表示されます。 対応するフレームの展開ボタンをクリックすると、折りたたまれた呼び出しを展開できます。

プロファイラー ツールウィンドウのタブで特定のメソッドにフォーカスすると、IntelliJ IDEA はエディターで対応するソースを開きます。 また、それを右クリックして、別の プロファイラー ツールウィンドウタブを選択して開くこともできます。

スレッド
プロファイラー ツールウィンドウのタブ内のプロファイリングデータは、スレッドごとにグループ化されています。 プロセス全体 (全スレッドマージ済み) のマージされたデータを表示するか、詳細な調査のために特定のスレッドを選択するかを選択できます。
スレッドを表示
デフォルトでは、スレッドのリストは非表示になっており、すべてのスレッドを合わせたデータが表示されます。
特定のスレッドを選択したり、スレッドのリストを確認したりするには、左側のツールバーの スレッドビューを表示 をクリックします。

スレッドは プロファイラー ツールウィンドウの左側に一覧表示され、収集されたサンプルの数でソートされています。 リストの一番上で最もビジーなスレッドを見つけることができます。
ラインプロファイラー
スナップショットを開くと、IntelliJ IDEA は プロファイラー ツールウィンドウを表示し、エディター内の対応する行の近くにランタイムヒントを追加します。
実行にかなりの時間がかかった行には灰色のラベルが付けられ、最もリソースを消費するメソッドには火のアイコンが付いた赤いラベルが付けられます。

プロファイラー ツールウィンドウの 視聴モードを切り替えるも、エディターのラベルのモードを変更します。 この行の実行の結果として、メソッドの合計実行時間、CPU 時間、または割り当てられたメモリ量を表示するように選択できます。
ラベル付けされたメソッドの内部を詳しく調べたい場合は、ヒントをクリックするとメソッド宣言に移動し、速度低下の原因となっている特定の行を調べることができます。

フレームグラフ
フレームグラフは、アプリケーション呼び出しツリーを、呼び出しスタックのフレームを表す四角形で幅順に視覚化します。 より多くのリソースを消費するフレームは、他のフレームよりも幅が広く、左側に配置されます。

例: 上のフレームグラフから次の観察を行うことができます:
main()の実行時間は、メソッドa()およびb()によって提供されました。 次に、a()はc()と呼ばれます。c()は主にArrayListに要素を追加していますが、もしArrayListの容量が十分であれば、所要時間は短くなります。追加は主にリストを拡張するのに忙しい状態です。ほとんどの場合、
b()はIndexOutOfBoundsExceptionを処理しています。 これらの例外がどこから来ているのかを分析し、それについて何かできるかどうかを確認することをお勧めします。
IntelliJ Profiler は、色分けを使用してさまざまなタイプのフレームを区別します。
フレームタイプ | ライトテーマ | ダークテーマ |
|---|---|---|
プロジェクトコード | 黄 | 黄 |
ライブラリコード | 紫 | グレー |
ネイティブコード | 青 | 青 |

呼び出しの詳細を取得する
ブロックの上にマウスを置くと、フレームの詳細を含むツールチップが表示されます。 ツールチップには、スナップショット全体とフレームの直接の親における時間の割合が表示されます。

グラフをズームする
フレームグラフのツールバーまたはスクロールホイールの
ボタンと
ボタンを使用して、グラフをズームします。
特定の方法に焦点を合わせるには、グラフ上の対応するブロックをダブルクリックします。
グラフの元のサイズに戻すには、ツールバーの 1:1 をクリックします。

ノードのしきい値を設定する
特にビューがズームインされ、スケールが簡単に識別できない場合、ノードがスナップショット内の時間またはサンプルのかなりの部分を占めているかどうかを判断するのは難しい場合があります。 この場合、しきい値を設定して、十分に重くないノードをグレー表示にすることができます。
をクリックして ノードフィルターの表示 を選択します。
フレームグラフの右側にあるスライダーを使用します。 このしきい値を超えないノードは無色で表示されます。

グラフを検索する
グラフ上で特定のメソッドを見つけたい場合は、その名前の入力を開始するか、
をクリックして検索バーに名前を入力します。
グラフは、検索リクエストに一致するメソッド名を持つすべてのブロックをハイライトします。

および
を使用すると、検索結果間を高速に移動できます。 ツールバーのボタンを使用すると、グラフ全体または特定のサブツリーを検索し、何かが見つかるとすぐに結果に移動することもできます。
グラフをキャプチャーする
スナップショット内の他のデータとは別にグラフをキャプチャーしてエクスポートできます。
をクリックして クリップボードにコピー を選択するか、 保存する をクリックしてグラフを .png 形式のイメージとしてエクスポートします。
呼び出しツリー
呼び出しツリー タブは、サンプリングされたデータをツリーのような構造に編成します。

各メソッドについて、タブには次の情報が表示されます。
合計実行時間または親の実行時間を共有します
合計実行時間
デフォルトでは、パーセンテージは合計実行時間に比例します。 親フレームを基準にして数値を表示するように選択できます。
合計と親の間でパーセンテージを切り替える
をクリックし、 合計時間の割合を表示 または 親の割合を表示 を選択します。

コールツリー結果のフィルタリング
呼び出しツリー タブでは、現時点で関心のないフレームを折りたたむことができます。 例: ライブラリクラスまたは特定のフレームワークに由来するクラスを非表示にして、アプリケーションコードに焦点を当てることができます。
フィルタリングルールを構成する
設定 ダイアログ(Ctrl+Alt+S )で、 を選択します。
このダイアログでは、既存のルールを変更して新しいルールを追加できます。
出力で非表示にするパッケージまたは特定のクラスを構成します。
クラス内のすべてのメソッドをフィルタリングするには、完全修飾クラス名を指定します(例:
org.bar.ClassName)。クラス内の特定のメソッドをフィルタリングするには、次の形式を使用します: fully qualified class name : method name (例:
* : myMethod())。
再帰呼び出しを折りたたむ
再帰を含むスタックは解析が難しい場合があります。 通常の 呼び出しツリー ビューでは、再帰呼び出しは呼び出されるたびに次々に表示されるため、スタックのスクロールがほぼ無限に続く可能性があります。
IntelliJ IDEA は、同じメソッドが呼び出しスタックの上位で呼び出されたときに再帰を検出します。 この場合、サブツリーは呼び出しツリーから取り出され、そのメソッドの最初の呼び出しにアタッチされます。 このようにして、再帰をバイパスし、それらが行うリソースと呼び出しのほとんどを消費するメソッドに集中することができます。
再帰呼び出しを折りたたむと、再帰がないかのように、これらの呼び出しに費やされた合計時間を確認できます。

折りたたまれた再帰呼び出しには、「呼び出しツリー 」タブの アイコンがマークされます。 これをクリックすると、別のタブで再帰呼び出しツリーが開きます。 再帰アイコンの上にマウスを置くと表示されるツールチップで、マージされた呼び出しの数をプレビューできます。
仮に: 特定の方法に焦点を当てる
IntelliJ IDEA では、 呼び出しツリー 内の特定のノードやサブツリーを調査することができます。特定のメソッドを除外することも、その逆に、現時点で関心のあるノードのみに焦点を当てることもできます。
呼び出しツリー タブで必要なノードを右クリックし、次のオプションのいずれかを選択して、専用のタブで結果を開きます。
サブツリーにフォーカス: 選択したメソッド呼び出しのみを表示します。 親メソッドのサンプルカウンターには、選択したサブツリーで費やされた時間のみが表示されます。
呼び出しにフォーカス: 選択したメソッドとそれを呼び出すメソッドを表示します。 このオプションを有効にすると、すべてのフレームに、選択したメソッドで費やされた時間のみが表示されます。
サブツリーを除外: 選択したメソッド呼び出しを無視します。
呼び出しを除外: 選択したメソッドへのすべての呼び出しを無視します。
メソッドリスト
メソッドリスト は、プロファイルデータ内のすべてのメソッドを収集し、累積サンプル時間でソートします。 このリストのすべてのアイテムには、いくつかのビューがあります。
バックトレース は、呼び出し元の階層を示しています。 このビューを使用して、選択したメソッドを呼び出すメソッドをトレースします。
マージされた呼び出し先 は、呼び出し階層の下位にあるメソッドを要約した呼び出しツリーです。
呼び出し先のリスト は、呼び出し階層の下位にあるメソッドを要約したメソッドリストです。

タイムライン
タイムラインは、個々のスレッドのアクティビティを監視する機能を提供します。 CPU アクティビティとメモリ割り当てを経時的に視覚化するため、最もアクティブなスレッドの検出、同時実行の問題の調査、I/O のプロファイリングなど、さまざまなタスクに役立ちます。

赤い縦棒はスレッドのスリープ状態を示します
緑色の縦バーはスレッドの実行状態を示します
青い縦棒はメモリ割り当てイベントを示します
上部のグラフは CPU 負荷を示しています。 グラフをヒープメモリ使用量に切り替えるには、 メモリの割り当てモードを選択します。
タイムラインでイベントをフィルタリングする
ツールウィンドウの右上隅にある フィルター メニューを開き、表示する必要のあるイベントのタイプを選択します。
イベントのスタックトレースを取得する
タイムライン上のイベントをクリックします。 スタックトレースは、 プロファイラー ツールウィンドウの右側に表示されます。

メソッド宣言に移動するには、対応するスタックフレームをクリックします。 スタックをコピーするには、スタックを右クリックして スタックをコピー を選択します。