繁体   English   中英

跨Java进程共享对象

[英]Sharing objects across Java processes

我正在从主应用程序执行另一个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是否为此提供任何实用程序?

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

您可以公开服务以允许从对象访问数据。 使用RMI设置进程间通信相对简单。 将会有IPC开销,因此它的性能将不如本地访问,细粒度的访问将变得很昂贵,但是如果您要获取摘要数据或其他汇总数据,那么这可能是一个不错的模型。

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

没有Java中没有共享内存支持。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM