2012-03-21 21 views
5

作業中のJVM内でクラスインスタンスを見つける方法を理解しようとしています。 JVMは別のプロセスに組み込まれており、このプロセスによってオブジェクトが作成されます。同じプロセスでJavaコードが実行されます。 JavaコードでJavaオブジェクト参照に直接アクセスすることはできませんが、そのオブジェクトのクラスはわかります。このクラスのオブジェクトがJVMですでにインスタンス化されているかどうかを調べたい場合は、それらを探したい(このクラスのすべてのインスタンスへの参照を持つObject配列を取得する)。このメカニズムは、Java APIまたはJNI APIのいずれかになります。実行中のJVMでクラスインスタンスを見つける方法

私は、デバッガですべてのインスタンスを検査させることが可能であることがわかっています。私は方法を見つけるように見えない。

おかげ

ニキータ

+0

と思います。未知のアプリケーションをインスタンス化されたオブジェクトにアクセスできるJBossまたはTomcatまたはWebSphereまたはxxxで実行したいですか? – Java42

+0

これが可能なら、私は非常にショックを受けます。 –

答えて

1

誰かが好奇心が強い場合は、可能ですが、今はJVMTIを使用しています。簡単ではありませんが、非常に実行可能です。あなたはjvmtiに関する私の他の投稿を見ることができ、答えを見つけることができます。

Perplexed by jvmti object allocation callback behavior

おかげでそこにすべてのそれらのサーブレットエンジンの

0
+0

Instrumentationパッケージで、すでにインスタンス化されたオブジェクトにアクセスできるものが見つかりません。それはクラスとクラスの読み込みでは手間がかかりますが、オブジェクトではできません。それ以上の考え?ありがとうございました –

+0

@NikitaVisnevskiこのメソッドは、 'getAllLoadedClasses()'や 'getInitiatedClasses(..)' – Adrian

+0

(ここに届いています)私はあなたの(埋め込み)JVMの起動時に計測エージェントを指定し、新しいX()。 – alphazero

0

これは私が正しくあなたの条件を理解している場合しかし、あなたはおそらく仕事に行くされていない自分自身をデバッグするために、あなたのプロセスを必要とするデバッグインタフェース

http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/

を使用して別のプロセスから可能でなければなりません。

関連する問題