プロファイラ・クラス・セットは、プログラムのプロファイリング時に考慮するクラスを定義します。
プロファイラ・クラス・セットは、プロファイリング・セッションに組み込むクラスおよび除外するクラスをリスト表示することにより定義します。このクラス・セット(組み込むクラスと除外するクラスの両方)により、プロファイラがプログラムとして判断する対象が決まります。プロファイラ・クラス・セットに組み込まれるクラスのみ、プロジェクトでのプロファイラの実行時に評価されます。
プロファイラ・クラス・セットは、「プロジェクト・プロパティ」ダイアログの「プロファイラ」ページで定義されます。
リスト内の各エントリはセミコロンで区切ります。エントリには、パッケージまたはクラスを指定できます。パッケージを組み込む場合、そのパッケージのサブパッケージおよびクラスもすべて組み込まれます。パッケージ全体を組み込む場合、そのパッケージ内のクラスの特定メンバーを除外できますが、その逆はできません。つまりあるパッケージを除外した場合、そのパッケージの一部のみを組み込むことはできません。パッケージ内のクラスまたはサブパッケージを1つでも使用する場合は、そのパッケージを除外しないでください。
したがって、java
を組み込む場合は、java
java.util
、java.io
、java.lang
、java.lang.ref
などが組み込まれます。必要に応じて、個々のサブパッケージを除外できます。 反対に、java
を除外した場合は、java.util
、java.io
、java.lang
、java.lang.ref
およびその他すべてのサブパッケージが除外されます。これらのサブパッケージのいずれかを個別に組み込むことはできません。
組込みリストの値が空の場合、すべてのクラスが組み込まれます。除外リストの値が空の場合、クラスは除外されません。両方のリストが空の場合は、すべてのクラスが組み込まれます。除外されるクラスはありません。
例として、メイン・プログラム・コードを含むmyPackage
、独自のファイル・ユーティリティを含むmyPackage.fileUtils
、Java J2SEを含むjava
を使用するプログラムを想定します。
すべてのコードを指定する場合は、次のように入力します。
Include = "myPackage"
Exclude = ""
または
Include = ""
Exclude = "java"
ファイル・ユーティリティ以外のすべてのコードを指定する場合は、次のように入力します。
Include = "myPackage"
Exclude = "myPackage.fileUtils"
java
を含め、すべてを組み込む場合は、次のように入力します。
Include = ""
Exclude = ""
(ここで定義した内容のみ組み込まれるように)組込みリストを指定した後で、そのリストの要素に含まれていないものを除外する必要はありません。
たとえば、myPackage
を組み込んだ場合に、java
を除外する必要はありません。java
はmyPackage
に含まれないため組み込まれず、自動的に除外されています。
また、組込みリストが除外リストに完全に含まれている場合、プロファイラ・クラス・セットは空になります。
たとえば、myPackage.fileUtils
を組み込んだ後でmyPackage
を除外した場合は、組み込んだはずの要素がすべて除外されます。myPackage.fileUtils
はmyPackage
に完全に含まれるため、除外されます。また、組み込んだ要素が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.