Mașină virtuală Java

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Pictogramă lupă mgx2.svg Același subiect în detaliu: arhitectura mașinii virtuale Java .

În informatică, mașina virtuală Java (numită și Java Virtual Machine sau JVM ) este componenta software a platformei Java care execută programe traduse în bytecode după prima fază de compilare în bytecode (printre limbajele de programare care pot fi traduse în bytecode găsiți Java , Groovy , Clojure , Scala și Eta ).

Principiu

Pașii care trebuie parcurși pentru a rula un program scris în Java sunt următorii:

  1. Un programator folosește un editor de text sau un mediu de dezvoltare integrat precum Eclipse, NetBeans sau IntelliJ IDEA pentru a scrie una sau mai multe clase Java
  2. Software-ul compilator transformă programul în bytecode, care reprezintă o ușoară abstracție a codului mașinii
  3. Bytecode-ul este furnizat unei mașini virtuale Java care îl rulează

Bytecode este produs în general prin compilarea codurilor sursă (sau fișiere sursă ) scrise în Java , deși este posibil să se producă bytecode pornind de la alte limbi precum Scala , Kotlin , Clojure sau Groovy [1] .

JVM este definit de o specificație , menținută de Oracle . Orice sistem care se comportă într-un mod conform cu această specificație este considerat a fi o implementare specială a JVM. Există implementări software pentru practic toate sistemele de operare moderne, atât gratuite, cât și comerciale. În plus, există implementări speciale pentru anumite medii hardware / software , cum ar fi telefoane mobile și PDA-uri ), și chiar implementări hardware, cum ar fi Jazelle .

Disponibilitatea implementărilor mașinilor virtuale Java pentru diferite medii de operare este cheia portabilității Java, proclamată în sloganul scrie o dată, rulată peste tot . De fapt, mașina virtuală creează un mediu de execuție omogen, care ascunde orice specificitate a sistemului de operare subiacent de software-ul Java (și, prin urmare, de la programator):

Software pentru aplicații Java
Mașină virtuală Java
Sistem de operare

Implementări

OpenJDK și HotSpot

În plus față de gestionarea specificațiilor mașinii virtuale Java, Oracle oferă o implementare numită HotSpot, care este gratuită și parțial open source. Partea nedistribuibilă se referă la fonturi, audio, securitate și criptare [2] [3] ; Implementările Oracle sunt de obicei văzute ca implementări de referință , dar sunt, de asemenea, utilizate pe scară largă de către utilizatorii finali, companii și instituții.

IcedTea și Zero

Pentru a înlocui părțile din HotSpot care se aflau sub o licență non-deschisă, s-a născut proiectul IcedTea. [4] Mașina virtuală dezvoltată în acest proiect se numește HotSpot Zero Assembly, numită și simplu Zero. [5] Proiectul își propune, de asemenea, să susțină mai multe familii de procesoare decât mașina virtuală Oracle. Pentru a face acest lucru, tot codul de asamblare prezent în HotSpot a fost rescris în C ++, astfel încât să poată fi compilat pe arhitecturi multiple. [6]

Celelalte implementări

Numeroase alte părți oferă în mod regulat implementări de mașini virtuale Java, de obicei cu intenția de a concura cu implementarea Oracle în performanță; în unele cazuri acestea sunt implementări comerciale. Sunt disponibile și alte implementări open source ; printre cele mai cunoscute putem menționa Waba [7] . Specificațiile JVM sunt dictate și actualizate de Oracle ca inițiator și întreținător al proiectului, dar sunt adesea ignorate de multe dintre implementările non-Oracle ale JVM care există, în special în ceea ce privește cadrul pe care îl include fiecare JVM. În consecință, diferitele JVM-uri nu sunt total compatibile între ele și trebuie să aveți grijă la scrierea programelor dacă doriți ca acestea să funcționeze pe fiecare JVM. Cel mai bun lucru de făcut pentru acest lucru ar fi să nu utilizați cele mai recente caracteristici lingvistice introduse de Oracle în cele mai recente JVM-uri și să utilizați API-uri „stabile”, adică care au fost prezente în Oracle JVM din diferite versiuni.

Compilație Just-In-Time

Primele implementări ale mașinii virtuale Java au fost interpreți . Cu toate acestea, această soluție sa dovedit a fi ineficientă, deoarece programele interpretate erau încă foarte lente. Din acest motiv, toate implementările recente ale mașinilor virtuale Java au încorporat un compilator just-in-time ( compilator JIT ), adică un compilator intern, care la lansare traduce programul Java bytecode din mers într-un program normal în limbajul mașinii. computer gazdă [8] . În plus, această recompilare este dinamică, adică mașina virtuală analizează în mod constant modelul de execuție a codului ( profilare ) și optimizează în continuare părțile executate cel mai frecvent, în timp ce programul rulează.

Aceste trucuri, la prețul unei mici așteptări în faza de lansare a programului, vă permit să aveți aplicații Java care sunt mult mai rapide și mai ușoare. Cu toate acestea, chiar și așa, Java rămâne un limbaj mai puțin eficient decât limbaje compilate corespunzător, cum ar fi C ++ , ținând cont de faptul că există straturi suplimentare de abstractizare și de implementare a unei serii de automatisme, cum ar fi colectorul de gunoi , care, pe de o parte, economisiți bani, timp și erori în faza de dezvoltare a programelor, pe de altă parte, consumă memorie și timp CPU în faza de execuție a programului finalizat.

Notă

  1. ^ Simon Maple, Ghidul dezvoltatorului aventuros pentru limbile JVM , la zeroturnaround.com . Adus la 30 mai 2015 .
  2. ^ OpenJDK
  3. ^ Oracle America vs Google , Curtea Federală de Apel, 9 mai 2014
  4. ^ IcedTea Project Arhivat 6 octombrie 2014 la Internet Archive .
  5. ^ Întrebări frecvente despre zero și rechin
  6. ^ Zero and Shark: Zero-Assembly Port of OpenJDK Arhivat la 6 octombrie 2014 în Internet Archive .
  7. ^ Waba
  8. ^ (EN) Haase, C., Consumer JRE: Leaner, Meaner Java Technology , Sun Microsystems, 2007. Accesat la 30 mai 2015.

Bibliografie

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT