Koja je razlika između DVM i JVM?

1. Uvod

U ovom ćemo članku istražiti razlike između Java virtualni stroj (JVM) i Virtualni stroj Dalvik (DVM). Prvo ćemo na brzinu pogledati svakog od njih, a zatim napraviti usporedbu.

2. Što je vrijeme izvođenja?

Runtime sustav pruža okruženje za prevesti kod napisan jezikom visoke razine poput Jave u strojni kod i razumljiv Centralnoj procesnoj jedinici (CPU).

Možemo razlikovati ove vrste prevoditelja:

  • Sastavljači: Oni izravno prevode kodove sklopa u strojni kod, tako da je brz
  • Prevoditelji: Prevode kôd u sklopni kod, a zatim koristi asemblere za prevođenje rezultirajućeg koda u binarni. Korištenje ove tehnike je sporo, ali je izvršenje brzo. Također, rezultirajući strojni kod ovisi o platformi
  • Tumači: Prevode kôd dok ga izvršavaju. Budući da se prijevod događa tijekom izvođenja, izvršenje može biti sporo

3. Java virtualni stroj

JVM je virtualni stroj za pokretanje Java radne površine, poslužitelja i web aplikacija. Još jedna važna stvar u vezi s Javom jest da je razvijena imajući na umu prenosivost. Tako, JVM je također oblikovan tako da podržava više arhitektura domaćina i radi svugdje. Ali, pretežak je za ugrađene uređaje.

Java ima aktivnu zajednicu i nastavit će se široko koristiti u budućnosti. Štoviše, HotSpot je JVM referentna implementacija. Isto tako, postoji i više od pet drugih implementacija koje održava Zajednica otvorenog koda.

S novim izdanjem temeljenim na ritmu, Java i JVM dobivaju nova ažuriranja svakih šest mjeseci. Na primjer, možemo navesti neke prijedloge za sljedeća izdanja, poput Alata za pristup stranoj memoriji i pakiranje.

4. Dalvik virtualni stroj

DVM je virtualni stroj za pokretanje Android aplikacija. DVM izvršava Dalvik bytecode, koji je sastavljen od programa napisanih na jeziku Java. Imajte na umu da DVM nije JVM.

Jedno od ključnih načela dizajna DVM-a je to trebao bi raditi na mobilnim uređajima s malo memorije i učitava se brže u usporedbi s bilo kojim JVM-om. Također, ovaj je VM učinkovitiji kada pokreće više instanci na istom uređaju.

Google je 2014. objavio Android Runtime (ART) za Android 5 koji je zamijenio Dalvik za poboljšanu upotrebu baterije u performansama aplikacija. Posljednja verzija bila je 1.6.0 na Androidu 4.4.

5. Razlika između JVM i DVM

5.1. Arhitektura

JVM je VM zasnovan na stogu gdje se sve aritmetičke i logičke operacije provode putem push i pop operanda, a rezultati se pohranjuju u stog. Stog je također struktura podataka za pohranu metoda.

Nasuprot tome, DVM je VM zasnovan na registru. Ovi registri smješteni u CPU-u izvode sve aritmetičke i logičke operacije. Registar je struktura podataka za pohranu operanda.

5.2. Kompilacija

Java kôd kompajlira se unutar JVM-a u posrednički format koji se naziva Java bytecode (.class datoteke). Zatim, JVM raščlanjuje rezultirajući Java bajt kod i prevodi ga u strojni kôd.

Na Android uređaju DVM kompajlira Java kôd u srednji format koji se naziva Java bytecode (.class datoteka) poput JVM. Zatim, uz pomoć alata tzv Dalvik eXchange ili dx, pretvara Java bajt kod u Dalvik bajt kod. Konačno, DVM prevodi bajt kod Dalvik u binarni strojni kôd.

Oba VM-a koriste kompajler Just-in-Time (JIT). JIT kompajler je vrsta kompajlera koji izvodi kompilaciju tijekom izvođenja.

5.3. Izvođenje

Kao što smo ranije vidjeli, JVM je VM zasnovan na stogu, a DVM VM zasnovan na registru. VM bytecode baziranog na steku vrlo je kompaktan jer se mjesto operanda implicitno nalazi na stogu operanda. VM bajtkod zasnovan na registru zahtijeva da svi implicitni operandi budu dio naredbe. To ukazuje na to da Veličina koda temeljena na registru obično će biti puno veća od bajtkoda koji se temelji na stogu.

S druge strane, VM koji se temelje na registru mogu izražavati izračunavanja koristeći manje VM uputa od odgovarajućeg VM-a temeljenog na stogu. Otpremanje VM uputa je skupo, pa smanjenje izvršenihVM upute vjerojatno će značajno poboljšati brzinu VM-a zasnovanog na registru.

Naravno, ova je razlika relevantna samo kada se VM izvodi u interpretiranom načinu.

5.4. Izvršenje

Iako je moguće postaviti instancu JVM-a po pokrenutoj aplikaciji, obično ćemo konfigurirati samo jednu instancu JVM-a sa zajedničkim procesima i memorijskim prostorom za pokretanje svih aplikacija koje smo postavili.

Međutim, Android je dizajniran za pokretanje više DVM instanci. Dakle, za pokretanje aplikacije ili usluge, Android OS stvara novu DVM instancu s odvojenim postupkom u zajedničkom prostoru memorije i raspoređuje kôd za pokretanje aplikacije.

6. Zaključak

U ovom uputstvu predstavili smo glavne razlike između JVM-a i DVM-a. Obje VM-ove pokrenute aplikacije napisane na Javi, ali koriste različite tehnike i procese za kompajliranje i pokretanje koda.