簡體   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