有没有一种方法可以附加到已经运行的JVM?
例如,在JNI中,您可以使用JNI_CreateJavaVM创建一个VM并运行一个jar文件,并检查其所有类。
但是,如果该jar文件已经在运行中,我找不到一种方式来附加到其JVM并与其类通信或获取其env指针。
另一个问题是,如果该jar文件加载了我的本地库(.dll),并且我想在.dll内部创建一个JVM,我也无法这样做。也不能够附加到该jar文件的当前JVM,除非该jar文件调用我的函数。
以下是Java端的示例:
例如,在JNI中,您可以使用JNI_CreateJavaVM创建一个VM并运行一个jar文件,并检查其所有类。
但是,如果该jar文件已经在运行中,我找不到一种方式来附加到其JVM并与其类通信或获取其env指针。
另一个问题是,如果该jar文件加载了我的本地库(.dll),并且我想在.dll内部创建一个JVM,我也无法这样做。也不能够附加到该jar文件的当前JVM,除非该jar文件调用我的函数。
以下是Java端的示例:
class Foo
{
static {loadLibrary("Foo")}
}
在 C++ 方面:
void Foo()
{
//CreateJVM
//Attach to the current process..
//Call function from the jar that loaded me.
}
如果没有jar文件先调用Foo
,就无法完成此操作。
有什么想法吗?是否没有办法获取当前JVM或者连接到它或外部JVM实例?