(如果我错了,请纠正我)
据我所知,当您通过发出java命令运行java程序时,
java MyProg
程序将运行到新的JVM上。
是什么将程序加载到新的JVM中?它是JRE产生一个新线程吗?
如果每个程序都在自己的JVM中运行,那么它们是否可以相互通信?
我之前问了一个关于如何使用JMX向本地运行的java程序发送请求的问题。我发现如果在本地发出JMX命令,我不需要端口号。答案是客户端应用程序(例如jconsole,jvisualvm,jprobe等)搜索在机器上运行的Java应用程序。这很好,但考虑到客户端应用程序将在与要监视或通信的应用程序不同的JVM中运行,它们如何在没有端口号的情况下相互连接(因为它们不在同一个JVM上运行)?
如果两个程序正在运行,通常会有2个JVM。 JVM是否在同一个JRE流程中运行?并且这也不意味着两个JVM应该能够通信吗?
谢谢
答案 0 :(得分:6)
答案 1 :(得分:2)
有几种方法可以让不同的jvms中的程序进行通信:
ObjectInputStream,ObjectOutputStream
RMI
插座
答案 2 :(得分:2)
幕后没有特别的魔力。 java
是一个实现JVM的程序。如果你同时用两个不同的程序运行java
(例如,在两个不同的shell中),你会得到两个运行自己的JVM的进程。他们可以通过任何IPC或网络协议进行通信。