跨Java进程共享对象

时间:2009-09-17 08:20:42

标签: java process ipc processbuilder

我正在从主应用程序执行另一个JVM(java.exe)。有没有办法与新创建的进程共享一个对象(相当大的对象)(在创建时或创建后)。

someObject sO= new someObject();

//sO is populated

//Creating new process

Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("java  -cp " + tempDir +  jarsInPath  + " " + appMain);

现在我希望sO对象可用于proc对象

表示的进程

ProcessBuilder是否为此提供了任何实用程序?

4 个答案:

答案 0 :(得分:3)

如果要共享对象,最好的方法是使用线程而不是单独的进程。进程不能共享内存(除了通过JNI),因此您必须以序列化形式来回复制大对象,通过文件或通过RMI套接字连接(后者是更好的选择,因为它导致固有的同步)

答案 1 :(得分:1)

您可以公开服务以允许从对象访问数据。使用RMI建立进程间通信相对简单。这将是一个IPC开销,所以这不会像本地访问那样高效,细粒度的访问会变得昂贵,但如果你得到摘要或其他的数据,那么这可能是一个不错的模型。

您没有说明为什么这些是单独的过程。您是否有机会将子进程的代码直接加载到父进程中?可以动态加载和卸载。

答案 2 :(得分:0)

Java中没有共享内存支持。

解决这个问题的最简单方法是将对象序列化为临时文件,然后在新JVM中反序列化。

答案 3 :(得分:0)

我认为您可以使用分布式缓存来实现此目的(EHCache,memcached等等)