Hvad er forskellen mellem DVM og JVM?

1. Introduktion

I denne artikel undersøger vi forskellene mellem Java Virtual Machine (JVM) og Dalvik Virtual Machine (DVM). Vi kigger først hurtigt på hver af dem og foretager derefter en sammenligning.

2. Hvad er en kørselstid?

Et runtime-system giver et miljø til oversæt koden skrevet på et højt sprog som Java til maskinkode og forståelig af den centrale processorenhed (CPU).

Vi kan skelne mellem disse typer oversættere:

  • Montører: De oversætter direkte samlingskoder til maskinkode, så det er hurtigt
  • Compilers: De oversætter koden til samlingskode, så bruger den assemblere til at oversætte den resulterende kode til binær. Brug af denne teknik er langsom, men udførelsen er hurtig. Den resulterende maskinkode er også platformafhængig
  • Tolke: De oversætter koden, mens de udfører den. Da oversættelsen sker ved kørsel, kan udførelsen være langsom

3. Java Virtual Machine

JVM er en virtuel maskine til at køre Java desktop, server og webapplikationer. En anden vigtig ting ved Java er, at den blev udviklet med tanke på bærbarhed. Dermed, JVM er også formet til at understøtte flere værtsarkitekturer og køre overalt. Men det er for tungt for indlejrede enheder.

Java har et aktivt samfund og vil fortsat blive udbredt i fremtiden. Desuden er HotSpot JVM-referenceimplementeringen. Der er også mere end fem andre implementeringer vedligeholdt af Open Source Community.

Med den nye kadencebaserede udgivelse modtager Java og JVM nye opdateringer hver sjette måned. For eksempel kan vi liste nogle forslag til de næste udgivelser såsom Foreign-Memory Access og Packaging Tool.

4. Dalvik Virtual Machine

DVM er en virtuel maskine til at køre Android-applikationer. DVM udfører Dalvik bytecode, som er sammensat af programmer skrevet på Java-sproget. Bemærk, at DVM ikke er en JVM.

Et af de vigtigste designprincipper for DVM er det det skal køre på mobile enheder med lav hukommelse og indlæses hurtigere sammenlignet med enhver JVM. Denne VM er også mere effektiv, når den kører flere forekomster på den samme enhed.

I 2014 udgav Google Android Runtime (ART) til Android 5, som erstattede Dalvik for forbedret applikationsydelse batteriforbrug. Den sidste version var 1.6.0 på Android 4.4.

5. Forskellen mellem JVM og DVM

5.1. Arkitektur

JVM er en stakbaseret VM, hvor alle de aritmetiske og logiske operationer udføres via push- og pop-operander, og resultaterne lagres på stakken. Stakken er også datastrukturen til lagring af metoder.

Modsat er DVM en registerbaseret VM. Disse registre placeret i CPU'en udfører alle aritmetiske og logiske operationer. Registret er datastrukturen til lagring af operander.

5.2. Samling

Java-kode er kompileret inde i JVM til et mellemformat kaldet Java bytecode (.class-filer). Derefter JVM analyserer den resulterende Java bytecode og oversætter den til maskinkode.

På en Android-enhed kompilerer DVM Java-koden til et mellemformat kaldet Java bytecode (.class-fil) som JVM. Derefter ved hjælp af et kaldet værktøj Dalvik eXchange eller dx, det omdanner Java bytecode til Dalvik bytecode. Langt om længe, DVM oversætter Dalvik bytecode til binær maskinkode.

Begge VM'er bruger Just-In-Time (JIT) Compiler. JIT-kompilatoren er en type kompilator, der udfører kompilering under løbetiden.

5.3. Ydeevne

Som tidligere set er JVM en stak-baseret VM og DVM er en registerbaseret VM. Stakbaseret VM bytecode er meget kompakt, fordi placeringen af ​​operander implicit er på operandstakken. Registerbaseret VM bytecode kræver, at alle de implicitte operander er en del af en instruktion. Det indikerer, at Registerbaseret kodestørrelse vil normalt være meget større end stakbaseret bytecode.

På den anden side kan registerbaserede VM'er udtrykke beregninger ved hjælp af færre VM-instruktioner end en tilsvarende stakbaseret VM. Det er dyrt at sende en VM-instruktion, så reduktionen i udførtVM-instruktioner vil sandsynligvis forbedre hastigheden på den registerbaserede VM betydeligt.

Selvfølgelig er denne sondring kun relevant, når du kører VM i fortolket tilstand.

5.4. Udførelse

Selv om det er muligt at konfigurere en forekomst af JVM pr. Kørende applikation, konfigurerer vi typisk kun en enkelt forekomst af en JVM med delte processer og hukommelsesplads til at køre alle de applikationer, vi har implementeret.

Android blev dog designet til at køre flere DVM-forekomster. Så for at køre en applikation eller en tjeneste, er Android OS opretter en ny DVM-forekomst med en separat proces i delt hukommelsesplads og implementerer koden til at køre applikationen.

6. Konklusion

I denne vejledning præsenterede vi de vigtigste forskelle mellem JVM og DVM. Begge VM'er kører applikationer skrevet i Java, men de bruger forskellige teknikker og processer til at kompilere og køre kode.


$config[zx-auto] not found$config[zx-overlay] not found