cornercorner
FeaturesPluginsDocs & SupportCommunityPartners

プロファイルのヒント

ここでは、アプリケーションをプロファイルするときに知っておくとよい、プロファイルの一般的な事柄およびヒントを示します。

  • Profiler の調整 - 結果の精度 プロファイルに使用される JDK ごとに、Profiler は初期調整をする必要があります。この調整から得られたデータは、実行時間についてより精度の高い情報を提供するために、収集された結果から余分なプロファイルのオーバーヘッドを除外するのに使用されます。この調整データは、システムのパフォーマンス (CPU 速度、メモリーおよびバスのスループットなど) と JDK のバージョンに密接に関係しています。JDK の変更、またはシステムのパフォーマンスに影響を与える可能性のある変更をするたびに、確実に Profiler が正しい結果を収集できるように調整を再実行します。
  • 実行時最適化と計測 メソッドの呼び出しツリーおよびタイミングを取得するためには、Profiler で計測を実行する必要がありますが、これは元のアプリケーションのバイトコードが若干変更されることを意味します。実行を高速化するために元のコードがすでに JIT コンパイラによってコンパイルされていた場合、計測後にコードはインタープリタ実行方式に切り替えられるため、しばらくの間処理速度が著しく低下する可能性があります。このことは、必ずしも Profiler がオーバーヘッドを大きくしているわけではありません。適切に設定を行えば、プロファイル対象のアプリケーションをほぼ最高速度で実行できます。理想的には、VM が再び実行時最適化 (JIT) を適用できるように、プロファイル対象のコードは、計測後に数回実行することをお勧めします。これにより、本稼働環境での実際のアプリケーションの動作を示すプロファイル結果が確実に得られます。
  • 実行時最適化 - 単純なメソッドのスキップ 一般に、アプリケーションには、ネイティブコードにコンパイルされていたり、インライン化されていたりするために実行に時間のかからない単純なメソッドが数多く存在します。そのようなメソッドを計測しても、プロファイルのオーバーヘッドが増大するだけで意味のある結果は得られないため、「パフォーマンスを解析」>「アプリケーション全体」のプロファイルでは、プロファイル用の取得/設定メソッドおよび空のメソッドがデフォルトで無効になっています。つまり、呼び出しツリーまたはホットスポットのビューにはこれらのメソッドは表示されません。カスタムプロファイル構成を作成して、プロファイル用の取得/設定メソッド、および空のメソッドを明示的に有効にすると、この動作を変更できます。
  • 実行時最適化 - ネイティブルーチン Math.sin() のような一部の数学関数は、ネイティブコードを呼び出す Java メソッドとして実装されていますが、収集されたプロファイル結果ではこれらを確認できません。いくつかの実行の最適化によって、これらの関数はネイティブコードで直接実行されて Java の部分はスキップされるため、プロファイル結果には表示されません。この場合、Profiler はそうしたメソッドが実行されたことを検出できないため、適切な呼び出しの収集や表示をしません。プロファイル結果の評価時には、このことを認識しておくとよいでしょう。5.0 ベースの JVM を実行している場合に、Profiler が検出しない特定関数には、Math.sin()、Math.cos() および Math.sqrt() が含まれます。6.0 ベースの JVM では、Math.tan()、Math.abs()、Math.log()、および Math.log10() といった関数も検出されません。
  • コンパイル時最適化と実際のプロファイル結果 プロファイル結果を評価するときには、Java コンパイラによる最適化、一般的には、文字列連結や定数式の評価について認識しておくとよいでしょう。たとえば、System.out.println("Value of a: " + a) を使用すると、StringBuffer の作成と処理が行われ、最終的には float/double 変数を文字列 'a' として出力する解析/変換の機能を使用します。Profiler はこうした最適化を検出できないため、アプリケーションのコードの実際の実行時の流れと動作のレポートだけを行います。
  • 動的な CPU 周波数切り替え プロファイル対象のアプリケーションが、SpeedStep や PowerNow! のような動的に CPU 周波数を切り替える技術を備えたマシンで実行されている場合、これらを必ず無効にしてください。できるだけ正確なプロファイル結果を提供するために、 Profiler はシステムのパフォーマンスを示す静的な調整データを使用します。プロファイル中に CPU 周波数を変更すると、プロファイル結果の精度に著しい影響を及ぼします。

 

Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems