Hva er forskjellen mellom DVM og JVM?

1. Introduksjon

I denne artikkelen vil vi utforske forskjellene mellom Java Virtual Machine (JVM) og Dalvik Virtual Machine (DVM). Vi tar først en rask titt på hver av dem og deretter foretar en sammenligning.

2. Hva er en kjøretid?

Et kjøretidssystem gir et miljø til oversette koden skrevet på et høyt nivå språk som Java til maskinkode og forståelig av Central Process Unit (CPU).

Vi kan skille mellom disse typer oversettere:

  • Montører: De oversetter monteringskoder direkte til maskinkode, så det er raskt
  • Kompilatorer: De oversetter koden til monteringskode, og deretter bruker den montører til å oversette den resulterende koden til binær. Å bruke denne teknikken er treg, men utførelsen er rask. Den resulterende maskinkoden er også plattformavhengig
  • Tolker: De oversetter koden mens de utfører den. Siden oversettelsen skjer ved kjøretid, kan utførelsen gå tregt

3. Java Virtual Machine

JVM er en virtuell maskin for å kjøre Java desktop, server og webapplikasjoner. En annen viktig ting med Java er at den ble utviklet med tanke på bærbarhet. Og dermed, JVM er også formet for å støtte flere vertsarkitekturer og kjøre overalt. Men det er for tungt for innebygde enheter.

Java har et aktivt fellesskap og vil fortsette å bli mye brukt i fremtiden. Videre er HotSpot JVM-referanseimplementeringen. I tillegg er det også mer enn fem andre implementeringer vedlikeholdt av Open Source Community.

Med den nye kadensbaserte utgivelsen mottar Java og JVM nye oppdateringer hver sjette måned. For eksempel kan vi liste opp noen forslag til de neste utgivelsene, som Foreign-Memory Access og Packaging Tool.

4. Dalvik Virtual Machine

DVM er en virtuell maskin for å kjøre Android-applikasjoner. DVM utfører Dalvik bytecode, som er samlet fra programmer skrevet på Java-språket. Merk at DVM ikke er en JVM.

En av de viktigste designprinsippene til DVM er at den skal kjøre på mobile enheter med lite minne og lastes raskere enn noen JVM. Også denne VM er mer effektiv når den kjører flere forekomster på samme enhet.

I 2014 ga Google ut Android Runtime (ART) for Android 5 som erstattet Dalvik for forbedret applikasjonsytelse batteribruk. Den siste versjonen var 1.6.0 på Android 4.4.

5. Forskjellen mellom JVM og DVM

5.1. Arkitektur

JVM er en stabelbasert VM der alle aritmetiske og logiske operasjoner utføres via push- og popoperander, og resultatene lagres på stakken. Stakken er også datastrukturen for å lagre metoder.

I motsetning til dette er DVM en registerbasert VM. Disse registerene i CPU-en utfører alle aritmetiske og logiske operasjoner. Registeret er datastrukturen for å lagre operander.

5.2. Samling

Java-kode er samlet i JVM til et mellomformat kalt Java bytecode (.class-filer). Så, JVM analyserer den resulterende Java-bykoden og oversetter den til maskinkode.

På en Android-enhet kompilerer DVM Java-koden til et mellomformat kalt Java bytecode (.class-fil) som JVM. Deretter, ved hjelp av et verktøy som heter Dalvik eXchange eller dx, det forvandler Java bytecode til Dalvik bytecode. Endelig, DVM oversetter Dalvik bytecode til binær maskinkode.

Begge VM-ene bruker Just-In-Time (JIT) -kompilatoren. JIT Compiler er en type kompilator som utfører kompilering i løpet av kjøretiden.

5.3. Opptreden

Som tidligere sett er JVM en stabelbasert VM og DVM er en registerbasert VM. Stakkbasert VM bytecode er veldig kompakt fordi plasseringen av operander er implisitt på operandstakken. Registerbasert VM bytecode krever at alle implisitte operander er en del av en instruksjon. Det indikerer at Registerbasert kodestørrelse vil vanligvis være mye større enn Stack-basert bytecode.

På den annen side kan registerbaserte virtuelle maskiner uttrykke beregninger ved å bruke færre VM-instruksjoner enn en tilsvarende stabelbasert VM. Det er kostbart å sende en VM-instruksjon, så reduksjonen i utførtVM-instruksjoner vil sannsynligvis forbedre hastigheten til den registerbaserte VM betydelig.

Selvfølgelig er dette skillet bare relevant når du kjører VM i tolket modus.

5.4. Henrettelse

Selv om det er mulig å sette opp en forekomst av JVM per applikasjon som kjører, vil vi vanligvis bare konfigurere en enkelt forekomst av en JVM med delte prosesser og minneplass for å kjøre alle applikasjonene vi har distribuert.

Android ble imidlertid designet for å kjøre flere DVM-forekomster. Så for å kjøre et program eller en tjeneste, er Android OS oppretter en ny DVM-forekomst med en egen prosess i delt minne og distribuerer koden for å kjøre applikasjonen.

6. Konklusjon

I denne veiledningen presenterte vi hovedforskjellene mellom JVM og DVM. Begge VM kjører applikasjoner skrevet i Java, men de bruker forskjellige teknikker og prosesser for å kompilere og kjøre kode.