![](/img/trans.png)
[英]Java: Best practice for sharing localization object across many GUI objects?
[英]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.