プロファイラ・クラス・セットについて

プロファイラ・クラス・セットは、プログラムのプロファイリング時に考慮するクラスを定義します。

プロファイラ・クラス・セットは、プロファイリング・セッションに組み込むクラスおよび除外するクラスをリスト表示することにより定義します。このクラス・セット(組み込むクラスと除外するクラスの両方)により、プロファイラがプログラムとして判断する対象が決まります。プロファイラ・クラス・セットに組み込まれるクラスのみ、プロジェクトでのプロファイラの実行時に評価されます。

プロファイラ・クラス・セットは、「プロジェクト・プロパティ」ダイアログの「プロファイラ」ページで定義されます。

プロファイラ・クラス・セットの定義

リスト内の各エントリはセミコロンで区切ります。エントリには、パッケージまたはクラスを指定できます。パッケージを組み込む場合、そのパッケージのサブパッケージおよびクラスもすべて組み込まれます。パッケージ全体を組み込む場合、そのパッケージ内のクラスの特定メンバーを除外できますが、その逆はできません。つまりあるパッケージを除外した場合、そのパッケージの一部のみを組み込むことはできません。パッケージ内のクラスまたはサブパッケージを1つでも使用する場合は、そのパッケージを除外しないでください。

したがって、javaを組み込む場合は、javajava.utiljava.iojava.langjava.lang.refなどが組み込まれます。必要に応じて、個々のサブパッケージを除外できます。 反対に、javaを除外した場合は、java.utiljava.iojava.langjava.lang.refおよびその他すべてのサブパッケージが除外されます。これらのサブパッケージのいずれかを個別に組み込むことはできません。

組込みリストの値が空の場合、すべてのクラスが組み込まれます。除外リストの値が空の場合、クラスは除外されません。両方のリストが空の場合は、すべてのクラスが組み込まれます。除外されるクラスはありません。

例として、メイン・プログラム・コードを含むmyPackage、独自のファイル・ユーティリティを含むmyPackage.fileUtils、Java J2SEを含むjavaを使用するプログラムを想定します。

すべてのコードを指定する場合は、次のように入力します。

Include = "myPackage"
Exclude = ""

または

Include = ""
Exclude = "java"

ファイル・ユーティリティ以外のすべてのコードを指定する場合は、次のように入力します。

Include = "myPackage"
Exclude = "myPackage.fileUtils"

javaを含め、すべてを組み込む場合は、次のように入力します。

Include = ""
Exclude = ""

よくある間違い

(ここで定義した内容のみ組み込まれるように)組込みリストを指定した後で、そのリストの要素に含まれていないものを除外する必要はありません。

たとえば、myPackageを組み込んだ場合に、javaを除外する必要はありません。javamyPackageに含まれないため組み込まれず、自動的に除外されています。

また、組込みリストが除外リストに完全に含まれている場合、プロファイラ・クラス・セットは空になります。

たとえば、myPackage.fileUtilsを組み込んだ後でmyPackageを除外した場合は、組み込んだはずの要素がすべて除外されます。myPackage.fileUtilsmyPackageに完全に含まれるため、除外されます。また、組み込んだ要素がmyPackage.fileUtilsのみであるため、結局実際に組み込まれる要素はなく、プロファイラ・クラス・セットは存在しないことになります。

プロファイリングおよびプロファイラ・クラス・セット

プロファイラ・クラス・セットの目的は、プロファイラに何を参照するのかを指示することです。セットの定義方法は、返される結果に直接影響を与えます。

例として、デフォルトのプロファイラ・クラス・セットを使用する場合を想定します。このデフォルトには、J2SEもjavaパッケージも含まれません。プログラムのプロファイリングを実行すると、結果はどうなるでしょうか。

プロファイリング・セッションの実行を開始すると、独自のメソッドがいくつかのJ2SEメソッドをコールしている間にサンプルが取得された場合でも、プロファイラは独自のメソッドのヒットを登録し、J2SEメソッドのヒットを登録しません。独自のコードは変更できますが、使用しているライブラリのコードは通常は変更できないため、このことは非常に重要です。一方、メソッドが低速であり、その理由が不明な場合は、このメソッドがコールするライブラリを組み込んで、負荷の高いコールとそうでないコールを判断できます。

また、Finalizerオブジェクトも作成して、メモリー・プロファイリング・セッションを開始するとします。 VMは、java.lang.ref.Finalizerクラスから登録メソッドを自動的にコールしますが、このFinalizerオブジェクトの割当てはメソッドに起因します。この場合、J2SEをプロファイラ・クラス・セットに組み込まないようにします。 J2SEがセットの一部であった場合は、Finalizerオブジェクトのすべての割当てがFinalizer.register()メソッドでレポートされ、レンダリングされる結果は有用性の低いものになります。


イベント・プロファイリングについて
実行プロファイリングについて
メモリー・プロファイリングについて

 

Copyright © 1997, 2004, Oracle. All rights reserved.