Oracle® Solaris Studio 12.4: パフォーマンスアナライザ

印刷ビューの終了

更新: 2015 年 1 月
 
 

Java プロファイリングの表示モード

パフォーマンスアナライザには、Java プログラミング言語で記述されたアプリケーションのパフォーマンスデータを表示するための表示モードとして、ユーザーモード、上級モード、マシンモードの 3 つが用意されています。データがユーザーモードをサポートしている場合、デフォルトではユーザーモードが示されます。以降では、これらの 3 つの表示モードの主な違いをまとめます。

Java プロファイリングデータのユーザー表示モード

ユーザーモードでは、コンパイルされた Java メソッドや解釈された Java メソッドが名前で表示され、ネイティブメソッドがその自然な形式で表示されます。実行中は、解釈されたバージョンと 1 つまたは複数のコンパイルされたバージョンなど、特定の Java メソッドに対して多数のインスタンスが実行される可能性があります。ユーザーモードでは、すべてのメソッドが 1 つのメソッドとして集約されて表示されます。この表示モードは、パフォーマンスアナライザではデフォルトで選択されます。

ユーザー表示モードにある Java メソッドの PC は、メソッド ID とそのメソッドへのバイトコードのインデックスに対応し、ネイティブ関数の PC はマシン PC に対応します。Java スレッドの呼び出しスタックには、Java PC とマシン PC が混在している場合があります。この呼び出しスタックには、Java ユーザー表現を持たない Java ハウスキーピングコードに対応するフレームはありません。状況によっては、JVM ソフトウェアは Java スタックを展開することができず、<no Java callstack recorded> という特別な関数を持つシングルフレームが返されます。これは通常、合計時間の 5 ~ 10% にしかなりません。

ユーザーモードでの「関数」ビューには、Java メソッドおよび呼び出されたすべてのネイティブメソッドに対するメトリックが表示されます。「呼び出し元-呼び出し先」ビューには、呼び出しの関係がユーザーモードで示されます。

Java メソッドのソースは、コンパイル元の .java ファイル内のソースコードに対応し、各ソース行にメトリックがあります。Java メソッドの逆アセンブリは生成されたバイトコードのほか、各バイトコードに対するメトリックとインタリーブされた Java ソース (入手可能な場合) を示します。

Java ユーザー表現のタイムラインは、Java スレッドのみを示します。各スレッドの呼び出しスタックが、その Java メソッドとともに示されます。

Java ユーザー表現のデータ領域プロファイリングは、現在サポートされていません。

Java プロファイリングデータの上級表示モード

上級モードはユーザーモードに似ていますが、ユーザーモードでは表示されない JVM 内部要素の詳細のいくつかが、上級モードでは表示されます。上級モードでは、「タイムライン」にはすべてのスレッドが表示されます。ハウスキーピングスレッドの呼び出しスタックは、ネイティブ呼び出しスタックです。

Java プロファイリングデータのマシン表示モード

マシンモードでは、JVM ソフトウェアでインタプリタされるアプリケーションからの関数ではなく、JVM ソフトウェア自体からの関数が表示されます。また、コンパイルされたメソッドとネイティブメソッドがすべて表示されます。マシンモードは、従来の言語で書かれたアプリケーションのものと同じように見えます。呼び出しスタックは、JVM フレーム、ネイティブフレーム、およびコンパイル済みメソッドフレームを表示します。JVM フレームの中には、インタプリタされた Java、コンパイルされた Java、およびネイティブコードの間の変移コードを表すものがあります。

コンパイルされたメソッドのソースは、Java ソースに対して示されます。このデータは、選択されているコンパイルされたメソッドの特定の例を表します。コンパイルされたメソッドの逆アセンブリは、Java バイトコードではなく、生成されたマシンアセンブラコードを示します。呼び出し元 - 呼び出し先の関係はすべてのオーバーヘッドフレームと、インタプリタされたメソッド、コンパイルされたメソッド、ネイティブメソッドの間の遷移を表すすべてのフレームを示します。

マシン表示モードのタイムラインはすべてのスレッド、LWP または CPU のバーを示し、それぞれの呼び出しスタックはマシンモード呼び出しスタックになります。