好的,我只需要了解这件事。我的机器上安装了JVM。如果我开发了2个程序(2个带有自己主类的jar)并运行它们,它们是否都在同一个JVM上运行?
如果它们都在相同的JVM实例上运行,我该如何让它们进行通信?
我目前正在处理的系统在一台机器上安装了许多组件,但使用RMI相互通信。当这些组件在一台机器上运行时,这些组件使用RMI不是不切实际的吗?
答案 0 :(得分:3)
如果我开发2个程序(2个罐子用 他们自己的主要课程)并运行它们, 他们会同时奔跑吗? JVM?
通常不会,每个都将在他们自己的JVM进程(java
)中运行,除非你在另一个线程或其他东西中从另一个启动一个。
我目前正在处理的系统 已将多个组件安装在一个组件中 机器,但与每个人沟通 其他使用RMI。这不是不切实际的 这些组件在使用RMI时 他们都在一台机器上运行?
这有点不切实际,至少在发生所有(反)序列化时效率低下。 (RMI使用对象序列化来编组和解组参数)
OSGi(Java动态模块系统)
如果您在本地运行,并且只需要组件来查找彼此,我建议您将它们变成OSGi个捆绑包。它已经为这种用途进行了工程设计。
(例如,这是Eclipse IDE组件和插件彼此交互的方式,同时是松散耦合的,没有不必要的(de)序列化)
答案 1 :(得分:1)
如果两个应用程序分别启动(即使它们在同一台物理计算机上运行),它们将在不同的虚拟机中运行。 OSGi已被提及作为将它们组合在一起的一种方式,但如果您想将它们作为单独的应用程序维护,则可能值得将Web服务视为一种通信方法。这相对于RMI的好处是与其他应用程序的互操作性以及未来开发的灵活性。
答案 2 :(得分:0)
如果两个应用程序在同一台机器上运行,你也可以使用可观察模式 - 想一想。