多个java应用程序可以在同一个VM下运行吗?
Posted
技术标签:
【中文标题】多个java应用程序可以在同一个VM下运行吗?【英文标题】:Can multiple java applications run under same VM? 【发布时间】:2011-07-27 05:58:19 【问题描述】:我正在运行两个不同的 Java 应用程序,并且都运行不同的 JVM。 实际上我需要在这些应用程序之间传递一些数据, 我已经在这里使用共享文件方法,但正在寻找更好的方法。
所以我的想法是,如果我们能够以某种方式在同一个 JVM 下运行这些应用程序,那么我们可以在这些应用程序之间传递数据。 我不知道我们如何在同一个 JVM 下运行的应用程序之间传递数据。
【问题讨论】:
如果这两个应用程序被设计为在它们自己的 JVM 下运行,那么将它们塞入一个单独的应用程序可能会遇到多种问题。 RMI 或套接字呢? 【参考方案1】:两个应用程序之间的数据传输技术是Java中的RMI,我认为你应该使用它。
这里是对此的介绍:Introduction to Java RMI
【讨论】:
【参考方案2】:您可以通过Socket
实现您的应用相互联系。
【讨论】:
是的,但如果他可以在单个 JVM 下运行,则可以节省大量空间并允许直接调用方法。 @seand:由于他目前使用的是共享文件,因此转换为套接字可能比合并应用程序更容易。【参考方案3】:当您使用应用程序服务器时,它们会很有效。应用程序服务器通常在自己的线程中运行您的应用程序,而不是在每个应用程序的 JVM 上运行。 如果您想实现类似的解决方案,您可以编写一个原始服务器,在特定线程中调用应用程序的 main 方法。
请注意,这也可能会给您带来额外的麻烦。例如,如果一个线程以System.exit(0)
退出应用程序,您的所有线程都将被关闭。
【讨论】:
【参考方案4】:如果您的应用没有固有的冲突(不兼容的 JVM 参数、冲突的单例等),它可能是可行的。您可能必须以某种方式修改您的 main() 方法;也许让您的 2 个应用程序在各自的线程中运行。
但是,如果不知道更多细节,就很难判断。
【讨论】:
【参考方案5】:对于您的任务,您无需在同一 JVM 实例下运行应用程序。
您可以在不同的 JVM 之间传递数据。有很多可用的解决方案。
例如:
RMI(我认为这个最适合你的情况)http://en.wikipedia.org/wiki/Java_remote_method_invocation JGroups http://www.jgroups.org/ JMS http://en.wikipedia.org/wiki/Java_Message_Service【讨论】:
以上是关于多个java应用程序可以在同一个VM下运行吗?的主要内容,如果未能解决你的问题,请参考以下文章
是否有一个插件或工具可用于在没有测试用例的情况下从正在运行的应用程序生成覆盖?
具有不同.net版本的多个应用程序可以在同一台服务器机器上运行吗
在 Ubuntu 18.04 VM (VirtualBox) 上运行的 Shiny Server 应用程序存在 OpenStreetMaps 问题(Java 错误)