Macchina virtuale Java: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Sumail (discussione | contributi)
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]] scrittitradotti in [[bytecode]] dopo una prima [[compilatore|compilazione]].
 
== Principio ==
Codice Java : compilazione : bytecode : VM -> esecuzione reale del programma
 
Il bytecode è generalmente prodotto dalla compilazione di [[filecodice sorgente|codici sorgenti]] (o [[File sorgente|file sorgenti]]) scritti in linguaggio [[Java (linguaggio)|Java]], anche se è possibile produrre bytecode partendo da altri linguaggi come [[Scala]], [[Clojure]] o [[Groovy]].
 
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==