我正在从主应用程序执行另一个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是否为此提供了任何实用程序?
答案 0 :(得分:3)
如果要共享对象,最好的方法是使用线程而不是单独的进程。进程不能共享内存(除了通过JNI),因此您必须以序列化形式来回复制大对象,通过文件或通过RMI套接字连接(后者是更好的选择,因为它导致固有的同步)
答案 1 :(得分:1)
您可以公开服务以允许从对象访问数据。使用RMI建立进程间通信相对简单。这将是一个IPC开销,所以这不会像本地访问那样高效,细粒度的访问会变得昂贵,但如果你得到摘要或其他的数据,那么这可能是一个不错的模型。
您没有说明为什么这些是单独的过程。您是否有机会将子进程的代码直接加载到父进程中?可以动态加载和卸载。
答案 2 :(得分:0)
Java中没有共享内存支持。
解决这个问题的最简单方法是将对象序列化为临时文件,然后在新JVM中反序列化。
答案 3 :(得分:0)
我认为您可以使用分布式缓存来实现此目的(EHCache,memcached等等)