5 Stimmen

Wie man eine Klasseninstanz in einer laufenden JVM findet

Ich versuche herauszufinden, wie ich eine Klasseninstanz innerhalb einer laufenden JVM finden kann. Die JVM ist in einen anderen Prozess eingebettet und ein Objekt wird von diesem Prozess erstellt. Derselbe Prozess führt meinen Java-Code aus. Ich habe keinen direkten Zugriff auf die Java-Objektreferenz in meinem Java-Code, aber ich kenne die Klasse dieses Objekts. Ich möchte herausfinden, ob bereits Objekte dieser Klasse in der JVM instanziiert sind, und wenn ja, möchte ich sie finden (zum Beispiel ein Objektarray mit Verweisen auf alle Instanzen dieser Klasse erhalten). Dieser Mechanismus kann entweder eine Java-API oder eine JNI-API sein.

Ich weiß, dass es möglich ist, da Debugger mir erlauben, alle Instanzen zu inspizieren. Ich kann einfach nicht den Weg finden.

Danke

Nikita

1voto

Nikita Visnevski Punkte 147

Falls es jemanden interessiert: Es ist möglich und ich mache es jetzt mit JVMTI. Nicht einfach, aber absolut machbar. Schau dir meinen anderen Beitrag über jvmti an und du wirst die Antwort finden.

Perplexed by jvmti object allocation callback behavior

Danke

0voto

alphazero Punkte 26906

Verwenden Sie Java Instrumentation APIs.

0voto

henry Punkte 5458

Dies sollte von einem anderen Prozess aus möglich sein, der die Debug-Schnittstelle verwendet

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

Wenn ich jedoch Ihre Anforderung richtig verstehe, müsste Ihr Prozess sich selbst debuggen, was wahrscheinlich nicht funktionieren wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X