我可以在不同的进程中连接到JVM吗?

时间:2015-05-05 06:32:50

标签: java c++ c windows java-native-interface

我有流程A和流程B.
进程A不允许实例化自己的JVM 进程B有一个正在运行的JVM实例。

如何处理A附加到进程B中运行的JVM并使用它在进程A中运行Java代码。

注意:不允许在进程B中执行Java处理。

1 个答案:

答案 0 :(得分:2)

可能:这正是典型的Java调试器所做的。 JVM导出调试接口,您可以将其附加到并用于控制正在运行的Java程序(包括注入您自己的代码)。

您有两种选择:编写Java Debug Wire Protocol (JDWP)客户端或编写JVM Tooling Interface (JVMTI)客户端。后者更容易,但不太受支持 - 您必须检查目标JVM是否支持它。

例如,使用JVMTI,您可以编写“调试器”代码,该代码使用JVMTI API(它本身在C / C ++中实现,自动注入到远程进程的JVM中,因此您不需要JVM)运行它的过程)。然后,您的“调试器”代码可以执行所需的任何计算。