Machina virtual Java

Le **machina virtual Java**, dicite anque **Java Virtual Machine** o **JVM**, es le componente del platteforma Java qui exeque le programmas traducite in *[[bytecode]]* post un prime compilation.

## Principio
Le passos qui debe esser facite pro exequer un programma scribite in linguage Java es le sequente:
# Un programmator usa un editor de texto o un ambiente de disveloppamento integrate (IDE) como Eclipse, NetBeans o IntelliJ IDEA pro scriber un o plus classes Java.
# Un compilator transforma le programma in *bytecode*, qui es un legier abstraction del codice machina.
# Le *[[bytecode]]* es providite a un machina virtual Java qui lo exeque.

Le *[[bytecode]]* es generalmente producite per le compilation de codices fonte (o file fonte) scribite in linguage Java, anque si il es possibile producer *[[bytecode]]* a partir de altere linguages como Scala, Clojure o Groovy.

Le JVM es definite per un specification, mantenite per Sun (nunc Oracle). Qualcunque systema qui se comporta in un maniera coherente con tal specification es considerate como un particular implementation del JVM. Il ha implementationes de programmatura per practicamente tote le systemas operative moderne, gratuite o commercialisate. In addition, il ha implementationes special pro particular ambientes hardware/software, como telephonos mobile e palmari), e etiam implementationes hardware como Jazelle. 

Le disponibilitate de implementationes del machina virtual Java pro diverse ambientes operative es le clave del portabilitate de Java, proclamate in le slogan *write once, run everywhere* ("scribe un vice, exeque in tote locos"). Le machina virtual crea un ambiente unic de execution functionante qualcunque specificitate del systema de operation subordinate:

## Implementationes
### OpenJDK e HotSpot
Ultra a diriger le specification del machina virtual Java, Oracle provide un implementation appellate HotSpot qui es gratuite e in parte in codice aperite. Le parte non distribuibile reguarda le font, le audio, le securitate e le cryptographia; le implementationes de Oracle es normalmente vidite como implementationes de referentia sed es anque largemente usate per usatores final, interprisas e institutiones.

### IcedTea e Zero
Pro substituer le partes de HotSpot qui era sub licentia non aperite, le projecto IcedTea es nascite. Le machina virtual disveloppate in tal projecto se appella *HotSpot Zero Assembly*, appellate anque simplemente *Zero*. Le projecto ha anque le scopo de supportar un numero major de famiglias de processatores in comparation al machina virtual de Oracle. Pro facer isto, tote le codice *assembly* presente in HotSpot ha essite rescribite in C++, in un maniera de poter esser compilate super plus de architecturas.

### Le altere implementationes
Numerose altere partes providite regularmente implementationes del machina virtual Java, normalmente con le intento de competer con le implementation de Oracle pro le performantias; in alcun casos illos es implementationes commercial. Illos es disponibile anque altere implementationes in codice aperite; inter le plus note on pote citar Waba.
Le specification del JVM es dictate e actualisate per Oracle in quanto initiator e mantenitor del projecto, sed es sovente disattendite per multes del implementationes non de Oracle del JVM qui es in circulation, specialmente per quanto reguarda le framework que cata JVM include. Dunque, le diverse JVM non es totalmente compatibile inter illos e on debe haber attention in le scriber le programmas, si on vole que illos functiona sur cata JVM. Le cosa melior a facer a tal scopo esserea de non usar le ultime characteristicas del linguage Java introducite per Oracle in le JVM le plus recente e usar le API "stabile", dunque illos pote esser presente in le JVM Oracle de varie versiones.

## Compilation ''Just-In-Time''
Le prime implementationes del machina virtual Java esseva **[[interprete (informatica)|interpretes]]**. Iste solution totevia se es revelate un pauco efficiente, quando le programmas interpretate esseva multo lente. Per iste motivo, tote le implementationes recente de machinas virtual Java ha incorporate un **[[compilator just-in-time]]** (*JIT compiler*), in altere parolas un compilator interne, qui al momento del lancear traduce al volo le *[[bytecode]]* Java in un programma normal in le linguage machina del computator hospite. In addition, iste recompilation es dynamic, in altere parolas le machina virtual analysa constantemente le modello de execution del codice (*profiling*), e optimisa ulteriormente le partes plus frequentemente exequite, durante que le programma es in execution.

Iste arrangiamentos, a precio de un parve periodo de attender in phase de lancear del programma, permitte de haber applicationes Java decisemente plus rapide e legier. Totevia, anque assi Java resta un linguage minus efficiente que le linguages propriemente compilate como le C++, per discontar le facto de posseder stratos de abstraction in plus, e de implementar un serie de automatismos, como le *[[garbage collection|garbage collector]]*, que si de un latere illos sparnia tempore e errores in phase de disveloppamento del programmas, del altere latere illos consume memoria e tempore de processator central (CPU) in phase de execution del programma finite.

## Referentias


## Bibliographia
* 
*