メソッドエントリまたはメソッド終了イベントがトリガーされたときに現在のジョブジェクトを取得することは可能ですか?特定のメソッドで入力されたジョブジェクトにタグを付けたいと思います。現在、クラスを定義するメソッドのみを取得できますが、オブジェクトは取得できません。
JVMTI APIには、類似したものは何も見つかりません。
ヒープ内のクラスを定義するメソッドのすべてのインスタンスを反復処理することはできますが、これでは、メソッドが正確に呼び出されたオブジェクトに関する情報は得られません。
JVMTIに含まれている例に示されているように、 BCIを使用してエージェントにJNI呼び出しを挿入します。heapProfiler
オブジェクトをパラメーターとしてメソッドに渡すことができます(1)。このように、すべてのメソッド呼び出しをリッスンする必要はありません。
MethodEntry
イベントは静的メソッドとネイティブメソッドで発生するため、インスタンスオブジェクトを含めることは合理的ではありません。さらに、JVMTIは、MethodEntry
パフォーマンスがひどいため、の使用を推奨していません。
本当にを使用する必要がある場合はMethodEntry
、ローカル変数()としてオブジェクトにアクセスすることでオブジェクトを取得できますGetLocalObject
。スロット0にある必要があります(ローカル変数テーブルを使用して確認してください)。
(1)初期化されていないオブジェクトにはアクセスできないため、super
コンストラクターメソッドをプロファイリングする場合は、後で呼び出しを挿入する必要があります。