Macchina virtuale Java: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Recupero di 1 fonte/i e segnalazione di 0 link interrotto/i.) #IABot (v2.0.9.3
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti.
Riga 4:
== Principio ==
I passi che devono essere fatti per eseguire un programma scritto in linguaggio Java sono i seguenti:
# Un programmatore usa un [[editor di testo]] o un [[integrated development environment]] come Eclipse, NetBeans o IntelliJ IDEA per scrivere una o più classi Java
# Un software di compilazione trasforma il programma in bytecode, che è una leggera astrazione del codice macchina
# Il bytecode viene fornito ad una macchina virtuale Java che lo esegue
Riga 12:
La JVM è definita da una [[specifica tecnica|specifica]], mantenuta da [[Oracle Corporation|Oracle]]. Qualsiasi sistema che si comporti in modo coerente con tale specifica viene considerato come una particolare [[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 [[Computer palmare|palmari]]), e persino implementazioni hardware come [[Architettura_ARM#Jazelle|Jazelle]].
 
La disponibilità di implementazioni della macchina virtuale Java per diversi ambienti operativi è la chiave della [[portabilità]] di Java, proclamata nello [[slogan]] ''write once, run everywhere'' ("scrivi una volta, esegui dappertutto"). La macchina virtuale realizza infatti un [[ambiente di esecuzione]] omogeneo, che nasconde al software Java (e quindi al programmatore) qualsiasi specificità del [[sistema operativo]] sottostante:
 
{| border=1 align=center
Riga 34:
 
== 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<ref>{{Cita libro|autore = Haase, C.|titolo = Consumer JRE: Leaner, Meaner Java Technology|anno = 2007|editore = Sun Microsystem|città = |accesso = 30 maggio 2015|url = http://www.oracle.com/technetwork/articles/javase/consumerjre-135093.html|lingua = en}}</ref>. Inoltre, questa ricompilazione è dinamica, cioè la macchina virtuale analizza costantemente il modello di esecuzione del codice (''profilattico''), 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.