2010-09-06 12 views
8

Il richiamo di java tramite due diverse righe di comando implica due JVM differenti o due istanze separate della stessa JVM.Istanze di JVM

+3

Sai che entrambe le risposte sono equivalenti? – Riduidel

+0

Dovresti essere più specifico. Che differenza c'è tra JVM e ciò che è uguale? Che differenza stai chiedendo? – splash

risposta

21

JVM è Java Virtual Machine, uno spazio di memoria in cui sono condivise le classi (codice) vengono caricati e gli oggetti (dati). JVM è equivalente a un processo del sistema operativo.

Quando si digita java... nella riga di comando si esegue un processo indipendente che carica le classi Java in memoria, le classi di base da Java e le proprie (dai file .class o .jar che si indicano).

altro comando java... caricherà un processo differente con la propria memoria e caricare classi da sola.

Confusione parola di istanza: quando si pronuncia "due istanze della stessa JVM". È normale dire un'istanza di una JVM a un processo separato, ovvero, a una JVM indipendente caricata. Se stai dicendo: due processi eseguono JVM 1.5, OK, è la stessa JVM nel senso che è la stessa versione ma sono processi diversi, "istanze" diverse, indipendenti in tutti i sensi.

Confusione webapp: Una webapp (ad esempio) è semplicemente un insieme di classi e oggetti istanziati, che partecipano a un URL in un server Web. Puoi avviare Tomcat con 10 app diverse, ovvero 10 diversi gruppi di classi e oggetti, ciascuno dei quali partecipa a richieste diverse, ma in realtà condividono lo stesso spazio di memoria (processo del sistema operativo). Una webapp non può toccare altri oggetti webapp perché nessuno gli dà un riferimento agli altri oggetti (e le classi sono in qualche modo nascoste ma questa è un'altra storia chiamata: caricamento in classe).

1

Qual è la differenza nella tua domanda? Direi: due diverse istanze JVM. :)

Ogni esecuzione del comando java fa richiamare una nuova istanza JVM. L'applicazione java in esecuzione può eseguire nuovi thread Java (come fa Tomcat con le applicazioni Web).

+0

vuoi dire che entrambi sono JVM diversi? – JavaUser

+0

Sì nel senso di diversi processi. – splash

+0

Come posso sentire questo .. Avete qualche codice o concetto per realizzare questo? – JavaUser

1

Due JVM separate. È possibile eseguire molte cose all'interno della stessa JVM (ad esempio 10 app Web pubblicate dalla stessa istanza Tomcat), ma è disponibile solo un comando java per avviare tomcat.

+0

allora perché dici due JVM diverse? – JavaUser

+0

Perché 2 comandi java porteranno a 2 istanze della JVM. Se invece si avvia Tomcat una sola volta e si esegue l'implementazione di 10 wars ... c'è solo 1 istanza della JVM in esecuzione – bwawok

1

Se hai iniziato java.exe del Sole dalla loro versione JDK/JRE 1.6 dallo stesso percorso di origine per due volte, si otterrebbe due istanze JVM separati e distinti. Non ci sarebbe alcuna condivisione tra di loro a meno che non l'hai configurato tramite le tue applicazioni. Se si desidera eseguire due JVM diversi, è necessario avviare un java.exe di un tipo (ad esempio 1.5) da una posizione e un java.exe (versione 1.6) da un'altra.