動的にコンパイルされる関数は、プログラムの実行中にコンパイルされリンクされる関数です。コレクタ API 関数collector_func_load() を使用して必要な情報をユーザーが提供しないかぎり、コレクタは C や C++ で記述された動的にコンパイルされる関数に関する情報を持っていません。「関数」タブ、「ソース」タブ、「逆アセンブリ」タブに表示される情報は、次のように、collector_func_load() に渡される情報によって異なります。
情報が提供されていない場合、つまり collector_func_load() が呼び出されていない場合、動的にコンパイルされて読み込まれた関数は、関数リストに <Unknown> として表示されます。関数ソースも逆アセンブリコードも、アナライザには表示されません。
ソースファイル名と行番号のテーブルが提供されていない場合に、関数の名前、サイズ、およびアドレスが指定されている場合は、動的にコンパイルされて読み込まれる関数の名前とそのメトリックスが関数リストに表示されます。注釈付きソースコードは利用可能で、逆アセンブリ命令を表示できます。ただし、行番号は不明であることを示すために [?] で示されます。
ソースファイル名を指定し、行番号テーブルを提供しないと、ソースファイル名を指定しない場合と同様の情報がアナライザによって表示されます。ただし、注釈付きソースの先頭には、関数が行番号のない命令で構成されていることを示す特別なインデックス行が表示されます。次に例を示します。
1.121 1.121 <Function func0, instructions without line numbers> 1. #include <stdio.h> |
ソースファイル名と行番号テーブルが提供されている場合、関数とそのメトリックスは、従来の方法でコンパイルされた関数と同じように、「関数」タブ、「ソース」タブ、および「逆アセンブリ」タブに表示されます。
コレクタ API 関数の詳細については、「動的な関数とモジュール」を参照してください。
Java プログラムでは、ほとんどのメソッドが JVM ソフトウェアによってインタプリタされます。別個のスレッドで動作する Java HotSpot 仮想マシンは、インタプリタの実行中にパフォーマンスを監視します。監視プロセス中仮想マシンは、1 つ以上のインタプリタを行なっているメソッドを取り出し、それらのメソッド用のマシンコードを生成し、元のマシンコードをインタプリタするのではなくさらに効率の良いマシンコードバージョンを実行することを決定する場合があります。
Java プログラムでは、コレクタ API 関数を使用する必要はなく、次の例に示すように、アナライザがメソッドのインデックス行の下にある特別な行を使用して、注釈付き逆アセンブリリストに Java HotSpot でコンパイルされたコードが存在することを認識します。
11. public int add_int () { 12. int x = 0; 2.832 2.832 <Function: Routine.add_int: HotSpot-compiled leaf instructions> 0. 0. [ 12] 00000000: iconst_0 0. 0. [ 12] 00000001: istore_1 |
逆アセンブリリストには、コンパイルされた命令ではなく、インタプリタされたバイトコードのみが示されます。デフォルトでは、コンパイルされたコードのメトリックスは、特別な行の隣りに表示されます。排他的および包括的 CPU 時間は、インタプリタされたバイトコードの各行に示されているすべての包括的および排他的 CPU 時間の合計とは異なります。通常は、何回かメソッドが呼び出されると、コンパイルされた命令の CPU 時間は、インタプリタされたバイトコードの CPU 時間の合計より多くなります。なぜなら、インタプリタされたコードは、メソッドが最初に呼び出されたときに一度だけ実行されるのに対し、コンパイルされたコードはその後も実行されるからです。
注釈付きソースには、Java HotSpot でコンパイルされた関数は表示されません。その代わりに、行番号なしで命令を示す特別なインデックス行が表示されます。たとえば、前述の逆アセンブリの抜粋に対応する注釈付きソースは、次のようになります。
11. public int add_int () { 2.832 2.832 <Function: Routine.add_int(), instructions without line numbers> 0. 0. 12. int x = 0; <Function: Routine.add_int()> |