2012-12-18 5 views
7

Sto lavorando a un'applicazione che può essere instanciata più volte nello stesso computer, allo stesso tempo. Ogni JVM carica inutilmente le classi delle applicazioni nella propria memoria, poiché le classi sono le stesse per tutte le applicazioni.Classi di azioni tra JVM

Ho letto su CDS here e here, ma sembra essere valido solo per le classi JDK.

Come posso condividere i dati delle mie classi di applicazioni tra le JVM?

+0

Mi sembra come scrivere un nuovo caricatore di classe e utilizzare la memoria condivisa tra i processi. Ma sarebbe più doloroso che comprare più ram. –

+0

"ma sembra essere valido solo per le classi Java", cos'altro deve essere condiviso tra le JVM? – Swapnil

+0

@SwapnilS Non intendevo dire, mi dispiace per la cattiva spiegazione. Quello che ho cercato di dire è che condivide solo le classi JDK. Modificherò la domanda. –

risposta

3

Non ero particolarmente al corrente di questi argomenti, ma ho fatto qualche ricerca. Penso che possiamo dire con molta certezza che non è praticamente possibile nella maggior parte delle JVM. La domanda di seguito è simile alla tua e contiene risposte e commenti che potrebbero essere utili.

Can multiple JVM processes share memory for common classes?

Un'opzione possibile è si potrebbe mettere le classi che si desidera condividere insieme in un unico processo ed esporre la loro funzionalità usando qualcosa come JMX (Java Management Extensions). In questo modo gli altri processi caricati più volte non dovranno caricare tutte le classi. Ma quanto questo può ridurre l'impatto totale delle risorse è ovviamente discutibile e dipende dal caso.

1

Mentre suona bene in teoria, questo non è veramente pratico. L'immagine di archiviazione di una classe Java è costituita da una certa quantità di dati costanti, ma probabilmente altrettanti dati "variabili": puntatori di link ad altre classi, varie tabelle di runtime, codice JITCed, ecc. Capire cosa è condivisibile e cosa non è È difficile nella migliore delle ipotesi e porta a progetti che non producono le migliori prestazioni.