我有流程A和流程B.
进程A不允许实例化自己的JVM
进程B有一个正在运行的JVM实例。
如何处理A附加到进程B中运行的JVM并使用它在进程A中运行Java代码。
注意:不允许在进程B中执行Java处理。
答案 0 :(得分:2)
可能:这正是典型的Java调试器所做的。 JVM导出调试接口,您可以将其附加到并用于控制正在运行的Java程序(包括注入您自己的代码)。
您有两种选择:编写Java Debug Wire Protocol (JDWP)客户端或编写JVM Tooling Interface (JVMTI)客户端。后者更容易,但不太受支持 - 您必须检查目标JVM是否支持它。
例如,使用JVMTI,您可以编写“调试器”代码,该代码使用JVMTI API(它本身在C / C ++中实现,自动注入到远程进程的JVM中,因此您不需要JVM)运行它的过程)。然后,您的“调试器”代码可以执行所需的任何计算。