La Java Virtual Machine è davvero una macchina virtuale nello stesso senso del mio file VMware o Parallels?


La Java Virtual Machine è davvero una macchina virtuale nello stesso senso del mio file VMware o Parallels?

Author: Aaron Fi, 2009-05-14

3 answers

No.

VMware e il resto virtualizzano effettivamente l'hardware della macchina. Il sistema operativo in esecuzione all'interno di un contenitore VMware (o Parallels o Windows' virtualization containers o Bochs o ...) hanno vari gradi di consapevolezza dell'esecuzione all'interno di un contenitore virtualizzato. All'interno di VMware, il sistema operativo non ha idea che sia in esecuzione all'interno di un contenitore virtuale. Il sistema operativo non viene modificato affatto, sebbene di solito siano installati driver specializzati (soprattutto video) per evitare problemi di prestazioni. Alcune altre VM non eseguono la virtualizzazione hardware completa e richiedono invece il sistema operativo all'interno del contenitore per effettuare chiamate speciali al contenitore al posto delle normali chiamate hardware.

La JVM non è affatto una macchina virtuale in questo senso. Nessun hardware diverso dal processore è virtualizzato. La JVM è essenzialmente una CPU virtualizzata più lo stesso tipo di runtime che è incluso con un C++ o qualsiasi altro oggetto orientato lingua, oltre a garbage collection e altre necessità. Inoltre, ovviamente, i file di classe Java (e file JAR, ecc.) Quindi la JVM deve compilare o interpretare i file di classe (contenuti in un file JAR o meno) in fase di runtime e ha la capacità di caricare e trovare nuovo codice dinamicamente in fase di runtime.

La JVM è chiamata macchina virtuale perché la definizione JVM definisce una macchina astratta. Questo include registri, stack, ecc. il codice byte in cui viene compilato l'origine Java è praticamente il codice macchina per questa macchina virtuale. La JVM quindi interpreta o compila questo codice byte nelle istruzioni della macchina nativa.

La differenza è essenzialmente che la JVM è un processore virtualizzatoe le altre macchine virtuali sono macchine virtualizzate (incluse scheda video, rete e altri dispositivi esterni e registri hardware).

 39
Author: Eddie, 2009-05-14 03:57:25

No. C'è una differenza tra macchina virtuale di sistema e macchina virtuale di processo. JVM è una macchina virtuale di processo, mentre VMware e il tipo sono macchine virtuali di sistema. Per ulteriori informazioni, fare riferimento alla voce di wikipedia .

Per quanto riguarda le macchine virtuali parallele, gli stati di voce sopra menzionati,

PVM (Macchina virtuale parallela) non sono macchine rigorosamente virtuali, come le applicazioni in esecuzione in cima hanno ancora accesso a tutti i sistemi operativi servizi, e sono pertanto non limitato al sistema modello fornito dalla "VM".

 9
Author: Adeel Ansari, 2009-05-14 03:33:47

C'è un discreto riassunto delle distinzioni in "Running Xen: A Hands-On Guide to the Art of Virtualization" di Jeanna Matthews, et al. ( Amazon ). VMware è un esempio di full virtualization e cerca di virtualizzare un'architettura hardware fisica in modo che diversi sistemi operativi guest non modificati possano sedersi su di essa. Una macchina virtuale Java è un esempio di ciò che chiamano application virtualization, dove " Le applicazioni vengono eseguite in un ambiente di esecuzione virtuale ciò fornisce un'API standard per l'esecuzione multipiattaforma e gestisce il consumo di risorse locali dell'applicazione."(pag. 13)

In entrambi i casi si dispone di un livello di virtualizzazione su cui viene eseguito il software. La JVM esegue applicazioni Java, mentre VMware esegue sistemi operativi completi. VMware virtualizza una macchina che era sempre espressa come hardware fisico. Una JVM virtualizza una macchina che potrebbe essere espressa in hardware fisico, ma quasi sempre non lo è (ma vedi JVM hardware).

 3
Author: Jim Ferrans, 2009-05-14 04:34:34