フィルターとライブインタラクション
ヒープウォーカーで興味のあるオブジェクトを探す際、同じクラスのインスタンスが多すぎるオブジェクトセットに到達することがあります。特定のフォーカスに応じてオブジェクトセットをさらに絞り込むために、選択基準にはそのプロパティや参照が含まれることがあります。例えば、特定の属性を含むHTTPセッションオブジェクトに興味があるかもしれません。ヒープウォーカーのマージされたアウトゴーイング参照ビューでは、オブジェクトセット全体の参照チェーンを含む選択ステップを実行できます。
しかし、個々のオブジェクトを表示するアウトゴーイング参照ビューでは、参照とプリミティブフィールドを制約する選択ステップを行うためのより強力な機能を提供します。
トップレベルのオブジェクト、プリミティブ値、またはアウトゴーイング参照ビューの参照を選択すると、フィルターを適用→選択した値を制限することでアクションが有効になります。選択に応じて、フィルタ値ダイアログは異なるオプションを提供します。どのオプションを設定しても、新しいオブジェクトセットのオブジェクトが選択されたものと同様のアウトゴーイング参照チェーンを持たなければならないという制約を常に暗黙的に追加します。フィルターは常にトップレベルのオブジェクトに対して機能し、現在のオブジェクトセットをおそらく小さなセットに制限します。
プリミティブ値の制約は、HPROFおよびJProfilerヒープスナップショットの両方で機能します。参照型の場合、JProfilerに非null値、null値、および選択したクラスの値をフィルタリングするように依頼できます。toString()
メソッドの結果によるフィルタリングは、ライブセッションでのみ利用可能ですが、java.lang.String
およびjava.lang.Class
オブジェクトの場合、JProfilerはこれを自動的に判断できます。
最も強力なフィルタータイプは、コードスニペットを使用するものです。オブジェクトをフィルタリングするための基本的に異なる2つの方法があります:
ライブセッションでは、JProfilerはプロファイルされたJVMでフィルタリングスクリプトを実行し、実際のインスタンスをスクリプトに渡すことができます。ライブオブジェクトでスクリプトを実行してフィルターを適用によって表示されるスクリプトエディタでは、プロパティに直接アクセスする式やスクリプトを書き、そのブール値の戻り値がインスタンスが現在のオブジェクトセットに保持されるべきかどうかを決定します。
当然、この機能はライブセッションでのみ機能します。なぜなら、JProfilerはライブオブジェクトにアクセスする必要があるからです。考慮すべきもう一つの要因は、ヒープスナップショットが取得された後にオブジェクトがガベージコレクトされている可能性があることです。その場合、コードスニペットフィルターが実行されたときに、そのようなオブジェクトは新しいオブジェクトセットに含まれません。
HPROFやPDHスナップショットを含むスナップショットでも機能するもう一つのオプションは、ダンプされたデータでスクリプトを実行してフィルターを適用アクションです。各インスタンスは、com.jprofiler.api.agent.heap.HeapObject
のインスタンスとしてスクリプトに渡されます。適用可能な場合、パラメータをダウンキャストできるいくつかのサブインターフェースがあります。詳細については、Javadocを参照してください。例えば、オブジェクトがオブジェクトインスタンスであり、フィールド値へのアクセスを提供する場合、com.jprofiler.api.agent.heap.Instance
インターフェースが利用可能です。スクリプトがトップレベルのオブジェクトで動作し、現在のオブジェクトセットのすべてのオブジェクトが同じタイプである場合、スクリプトパラメータは自動的に適切なサブタイプを持ちます。
これらのフィルタースクリプトでは、HeapObject
パラメータのメソッドを通じて、すべてのインカミングおよびアウトゴーイング参照にもアクセスできます。
PHDスナップショットにはフィールド情報が含まれていないため、そのようなスナップショットではすべてのインスタンスがcom.jprofiler.api.agent.heap.HeapObject
またはcom.jprofiler.api.agent.heap.ClassObject
として渡され、フィールド値はreferencedObjects()
メソッドを通じてのみアクセスできます。
フィルター以外にも、個々のオブジェクトと対話するためのアウトゴーイング参照ビューには2つの他の機能があります:toString()値を表示アクションは、現在ビューに表示されているすべてのオブジェクトでtoString()
メソッドを呼び出し、それらを参照ノードに直接表示します。ノードは非常に長くなる可能性があり、テキストが切り取られることがあります。コンテキストメニューからノードの詳細を表示アクションを使用すると、全体のテキストを確認できます。
toString()
メソッドを呼び出すよりもオブジェクトから情報を取得するためのより一般的な方法は、文字列を返す任意のスクリプトを実行することです。スクリプトを実行アクションは、toString()値を表示アクションの隣にあり、トップレベルのオブジェクトまたは参照が選択されているときにそれを行うことができます。スクリプトの実行結果は、別のダイアログに表示されます。