我有两个Java程序,每个程序都运行在自己的JVM实例中?他们可以使用共享内存或管道等任何IPC技术相互通信吗?有办法吗?
答案 0 :(得分:3)
是; D-BUS和Pipes易于使用且跨平台。 D-BUS对于通用消息传递IPC和发送批量数据的管道非常有用。
如果您需要支持连接到中央服务器的多个客户端,您还可以在localhost上打开TCP或UDP套接字。
我还找到了implementation of UNIX sockets in Java,但它需要JNI。
答案 1 :(得分:2)
http://java.sun.com/javase/technologies/core/basic/rmi/index.jsp
Java远程方法调用(Java RMI)使程序员能够基于Java技术的应用程序创建基于Java技术的分布式技术,其中远程Java对象的方法可以从其他Java虚拟机*调用,可能在不同的主机上。 RMI使用对象序列化来编组和解组参数,并且不截断类型,支持真正的面向对象的多态性。
答案 2 :(得分:1)
不确定。查看RMI或共享内存概念,如Java Spaces。
答案 3 :(得分:1)
在Java NIO中使用MemoryMappedByteBuffer在进程之间共享内存。
答案 4 :(得分:0)
对于来自Apache的柱状(即基于阵列)数据的语言无关IPC有一个相当新的倡议,称为Plasma。
到目前为止(9月17日)还没有JVM绑定,但由于该项目得到了Spark的支持,我认为在我们看到实现之前不久就已经过了。
我的理解是,没有一般的IPC系统,因为它适用于共享基本数组,如double
,long
,用于科学计算,而不是类/对象;虽然我在这里错了。
从好的方面来说,它也与语言无关,因此您可以使用它与另一个(非JVM)运行时进行通信。然而,OP确实要求Java IPC,所以这可能是无关紧要的。