JVM - 在正在运行(非检测)的会话中获取类的实例

0__*_*0__ 6 java reflection jvm reference

我需要通过在给定类的实例上调用特定方法来停止进程.这个过程已经运行了一天,如果我把它关闭,我会失去很多工作.由于API中的错误,GUI错误连线并且没有调用正确的停止功能.我附加了一个交互式Java(Scala)解释器,所以如果我能掌握进程的实例,我可以轻松地调用正确的方法.

我不在调试会话中,没有com.sun.jdi.我可以在堆栈跟踪转储中看到该实例,但StackTraceElement不包含实际实例,只包含类和行号.

在没有特定检测的情况下,在运行会话中是否有任何方法可以通过其类,通过线程转储来获取该实例?

apa*_*gin 2

可以使用 JVMTIIterateOverInstancesOfClass函数获取给定类的所有实例。请参阅此答案中的示例。

创建一个 JNI 库,它将使用上述函数找到所需的实例,并从入口调用其上的方法JNI_OnLoad。然后System.load从解释器控制台调用以加载该库。