Macchina virtuale Java: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
aggiunto Jazelle e altre informazioni |
Nessun oggetto della modifica |
||
Riga 1:
{{S|Java}}
{{vedi anche|Architettura della macchina virtuale Java}}
La '''macchina virtuale Java''', detta anche '''Java Virtual Machine''' o '''JVM''', è il componente della [[piattaforma Java]] che [[esecuzione (informatica)|esegue]] i [[programma (informatica)|programmi]]
== Principio ==
Codice Java : compilazione : bytecode : VM -> esecuzione reale del programma
Il bytecode è generalmente prodotto dalla compilazione di [[
La JVM è definita da una [[specifica]], mantenuta da [[Sun Microsystems]]. Qualsiasi sistema che si comporti in modo coerente con tale specifica viene considerato come una particolare [[implementare|implementazione]] della JVM. Esistono implementazioni [[software]] per praticamente tutti i [[sistema operativo|sistemi operativi]] moderni, sia gratuite che commerciali. Inoltre, esistono implementazioni speciali per particolari ambienti [[hardware]]/[[software]], come [[telefono cellulare|telefoni cellulari]] e [[palmare|palmari]]), e persino implementazioni hardware come [[Architettura_ARM#Jazelle|Jazelle]].
Riga 27:
== Compilazione ''Just-In-Time'' ==
Le prime implementazioni della [[macchina virtuale Java]] erano ''[[interprete (informatica)|interpreti]]''. Questa soluzione si è però rivelata poco efficiente, in quanto i programmi interpretati erano comunque molto lenti. Per questo motivo, tutte le implementazioni recenti di macchine virtuali Java hanno incorporato un [[compilatore just-in-time]] (''JIT compiler''), cioè un compilatore interno, che al momento del lancio traduce al volo il programma bytecode Java in un normale programma nel linguaggio macchina del computer ospite. Inoltre, questa ricompilazione è dinamica, cioè la macchina virtuale analizza costantemente il modello di esecuzione del codice (''profiling''), e ottimizza ulteriormente le parti più frequentemente eseguite, mentre il programma è in esecuzione.
Questi accorgimenti, a prezzo di una piccola attesa in fase di lancio del programma, permettono di avere delle applicazioni Java decisamente più veloci e leggere. Tuttavia, anche così Java resta un linguaggio meno efficiente dei linguaggi propriamente compilati come il [[C++]], scontando il fatto di possedere degli strati di astrazione in più, e di implementare una serie di automatismi, come il [[garbage collection|garbage collector]], che se da un lato fanno risparmiare tempo ed errori in fase di sviluppo dei programmi, dall'altro consumano [[memoria (informatica)|memoria]] e tempo di [[CPU]] in fase di esecuzione del programma finito.
==Voci correlate==
|