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

Java 我可以在不同的进程中连接到JVM吗?,java,c++,c,windows,java-native-interface,Java,C++,C,Windows,Java Native Interface,我有流程A和流程B。 不允许进程A实例化自己的JVM。 进程B有一个正在运行的JVM实例 进程A如何连接到进程B中运行的JVM,并使用它在进程A中运行Java代码 注意:不允许在进程B中进行Java处理。这是可能的:这正是典型Java调试器所做的。JVM导出调试接口,您可以附加这些接口并使用它们来控制正在运行的Java程序(包括注入您自己的代码) 您有两种选择:编写客户机,或编写客户机。后者更容易,但支持程度不高——您必须检查目标JVM是否支持它 例如,使用JVMTI,您可以编写“调试器”代码,

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

进程A如何连接到进程B中运行的JVM,并使用它在进程A中运行Java代码

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

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

您有两种选择:编写客户机,或编写客户机。后者更容易,但支持程度不高——您必须检查目标JVM是否支持它

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

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

您有两种选择:编写客户机,或编写客户机。后者更容易,但支持程度不高——您必须检查目标JVM是否支持它

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

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

您有两种选择:编写客户机,或编写客户机。后者更容易,但支持程度不高——您必须检查目标JVM是否支持它

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

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

您有两种选择:编写客户机,或编写客户机。后者更容易,但支持程度不高——您必须检查目标JVM是否支持它


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

是否有任何理由需要直接访问进程A中的JVM?是否可以使用一些基于文件的协议在这些进程之间进行通信?基于套接字的协议也非常适合进程间通信。也许可以这样看:你能编辑
B
吗?
B
是否已经运行了可以用来运行代码的任何远程处理服务?如果没有,您可能需要查看调试接口以连接到远程JVM(如果您自己编写“调试器”,则不一定需要Java)并插入代码。听起来像是一个讨厌的项目……有什么理由需要直接访问进程中的JVM吗?是否可以使用一些基于文件的协议在这些进程之间进行通信?基于套接字的协议也非常适合进程间通信。也许可以这样看:你能编辑
B
吗?
B
是否已经运行了可以用来运行代码的任何远程处理服务?如果没有,您可能需要查看调试接口以连接到远程JVM(如果您自己编写“调试器”,则不一定需要Java)并插入代码。听起来像是一个讨厌的项目……有什么理由需要直接访问进程中的JVM吗?是否可以使用一些基于文件的协议在这些进程之间进行通信?基于套接字的协议也非常适合进程间通信。也许可以这样看:你能编辑
B
吗?
B
是否已经运行了可以用来运行代码的任何远程处理服务?如果没有,您可能需要查看调试接口以连接到远程JVM(如果您自己编写“调试器”,则不一定需要Java)并插入代码。听起来像是一个讨厌的项目……有什么理由需要直接访问进程中的JVM吗?是否可以使用一些基于文件的协议在这些进程之间进行通信?基于套接字的协议也非常适合进程间通信。也许可以这样看:你能编辑
B
吗?
B
是否已经运行了可以用来运行代码的任何远程处理服务?如果没有,您可能需要查看调试接口以连接到远程JVM(如果您自己编写“调试器”,则不一定需要Java)并插入代码。听起来像是个讨厌的项目。。。