Oracle® Solaris Studio 12.4: パフォーマンスアナライザチュートリアル

印刷ビューの終了

更新: 2014 年 12 月
 
 

Java HotSpot コンパイラの動作の理解

この手順は前のセクションからの続きであり、「タイムライン」ビューと「スレッド」ビューを使用して HotSpot コンパイルを行うスレッドをフィルタして見つける方法を示しています。

  1. 「タイムライン」ビューを選択して、「アクティブなフィルタ」パネルの「X」をクリックしてフィルタを削除してから、キーボードの 0 を押して横方向ズームをデフォルトにリセットします。

    「タイムライン」ツールバーの横方向スライダの前面にある |< ボタンをクリックすることも、「タイムライン」で右クリックして「リセット」を選択することもできます。

  2. 「関数の色」ダイアログを再度開き、Routine.* 関数ごとに異なる色を選択します。

    「タイムライン」ビューで、色の変更がスレッド 2 の呼び出しスタック内に表示されます。

  3. スレッド 2 の色の変更が表示される期間、「タイムライン」のすべてのスレッドを確認します。

    イベントのパターンがスレッド 2 の色の変更とほとんど同じ時間に発生しているスレッドがいくつかあることがわかるはずです。この例では、スレッド 17、18、および 19 です。

  4. 「スレッド」ビューに移動して、スレッド 2 と、スレッド 2 が Routine.* 関数への呼び出しを示す期間のアクティビティーを示す実験内のスレッドを選択します。

    「名前」列ヘッダーをクリックして、最初に名前でソートすると簡単なことがあります。次に、Ctrl を押しながらスレッドをクリックして、複数のスレッドを選択します。

    この例では、スレッド 2、17、18、19 が選択されています。

  5. ツールバーのフィルタボタン image:「フィルタ」アイコン をクリックして、「フィルタを追加: 選択した項目に関するイベントのみを含める」を選択します。

    これによって、これらのスレッドのイベントのみを含めるようフィルタが設定されます。「スレッド」ビューで右クリックして、フィルタを選択することもできます。

  6. 「タイムライン」ビューに戻って、パターンを見やすくするために横方向ズームをリセットします。

  7. スレッド 17 および 18 内のイベントをクリックします。

    「呼び出しスタック」パネルには CompileBroker::compiler_thread_loop() が表示されます。これらのスレッドは、HotSpot コンパイラに使用されるスレッドです。

    スレッド 19 は、ServiceThread::service_thread_entry() が含まれている呼び出しスタックを示しています。

    image:特定のスレッドでのイベントを表示するためにフィルタされた「タイムライン」ビュー

    複数のイベントがこれらのスレッドで発生するのは、ユーザーコードが新しいメソッドを呼び出してそのメソッドでかなりの時間を費やすたびに、そのメソッドのマシンコードを生成するために HotSpot コンパイラが呼び出されるためです。HotSpot コンパイラは、実行するスレッドがユーザー CPU 時間をあまり使用しないくらいに十分に高速です。

    HotSpot コンパイラが呼び出される正確な方法の詳細はこのチュートリアルの範囲外です。