2012-12-18 239 views
7

我正在研究可以同時在同一臺計算機上多次實例化的應用程序。每個JVM都會將應用程序類加載到自己的內存中,因爲所有應用程序的類都是相同的。JVM之間的共享類

我讀了關於CDS herehere,但它似乎只對JDK類有效。

如何在JVM之間共享應用程序類的數據?

+0

在我看來,就像編寫一個新的類加載器並在進程之間使用共享內存一樣。但是,這比購買更多的內存更加痛苦。 –

+0

「但它似乎只對Java類有效」,還有哪些需要在JVM之間共享? – Swapnil

+0

@SwapnilS這不是我的意思,對不好的解釋抱歉。我試圖說的是它只共享JDK類。我將編輯該問題。 –

回答

3

我並沒有特別瞭解這個話題,但我做了一些研究。我想我們可以肯定地說,在大多數JVM中都不可能實現。下面的問題與您的問題類似,它有答案和意見可能有幫助。

Can multiple JVM processes share memory for common classes?

一個可能的選擇是,你可以把你想在一個進程一起共享和使用類似JMX(Java管理擴展)公開其功能的類。這樣,多次加載的其他進程不必加載所有的類。但是,這可以減少總的資源足跡,這當然是有問題的和依賴於案例的。

1

儘管理論上聽起來不錯,但這並不實際。 Java類的存儲映像由一定數量的常量數據組成,但可能只是「可變」數據 - 與其他類的鏈接指針,各種運行時表,JITCed代碼等。確定可共享的內容以及不可用的內容, t最好是困難的,並導致設計不能產生最佳性能。