Java >> Java tutorial >  >> JVM

Hvad er forskellen mellem DVM og JVM?

1. Introduktion

I denne artikel vil vi udforske forskellene mellem Java Virtual Machine (JVM) og Dalvik Virtual Machine (DVM) . Vi tager først et hurtigt kig på hver af dem og laver derefter en sammenligning.

Bemærk, at fra og med Android 5.0 er Dalvik Virtual Machine blevet erstattet af Android Runtime (ART).

2. Hvad er en Runtime?

Et runtime-system giver et miljø til at oversætte koden skrevet på et højt niveau sprog som Java til maskinkode og forstås af den centrale procesenhed (CPU).

Vi kan skelne mellem disse typer oversættere:

  • Assemblere:De oversætter direkte monteringskoder til maskinkode, så det er hurtigt
  • Kompilatorer:De oversætter koden til assemblerkode, så bruger den assemblere til at oversætte den resulterende kode til binær. Brugen af ​​denne teknik er langsom, men udførelsen er hurtig. Den resulterende maskinkode er også platformsafhængig
  • Tolke:De oversætter koden, mens de udfører den. Da oversættelsen sker under 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 det blev udviklet med bærbarhed i tankerne. Således er JVM også blevet formet til at understøtte flere værtsarkitekturer og køre overalt . Men den er for tung til indlejrede enheder.

Java har et aktivt fællesskab og vil fortsat blive meget brugt i fremtiden. Desuden er HotSpot JVM-referenceimplementeringen. Derudover er der også mere end fem andre implementeringer, der vedligeholdes af Open Source-fællesskabet.

Med den nye kadence-baserede 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'en udfører Dalvik bytecode, som er kompileret fra programmer skrevet på Java-sproget. Bemærk, at DVM ikke er en JVM.

Et af de vigtigste designprincipper for DVM er, at 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 applikationsydelses batteriforbrug. Den sidste version var 1.6.0 på Android 4.4.

5. Forskellen mellem JVM og DVM

5.1. Arkitektur

JVM er en stack-baseret VM, hvor alle de aritmetiske og logiske operationer udføres via push- og pop-operander, og resultater gemmes på stakken. Stakken er også datastrukturen til at gemme metoder.

I modsætning hertil er DVM en registerbaseret VM . Disse registre placeret i CPU'en udfører alle de aritmetiske og logiske operationer. Registeret er datastrukturen til at gemme operander.

5.2. Kompilering

Java-kode kompileres inde i JVM til et mellemliggende format kaldet Java bytecode (.class filer). Derefter parser JVM den resulterende Java-bytekode og oversætter den til maskinkode .

På en Android-enhed kompilerer DVM Java-koden til et mellemformat kaldet Java bytecode (.class-fil) ligesom JVM. Derefter, ved hjælp af et værktøj kaldetDalvik eXchange eller dx, transformerer det Java bytecode til Dalvik bytecode . Endelig oversætter DVM'en Dalvik-bytekoden til binær maskinkode .

Begge VM'er bruger JIT-kompileren (Just-In-Time) . JIT-kompileren er en type compiler, der udfører kompileringen under kørselstiden.

5.3. Ydeevne

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

På den anden side kan registerbaserede VM'er udtrykke beregninger ved hjælp af færre VM-instruktioner end en tilsvarende stack-baseret VM. Det er dyrt at sende en VM-instruktion, så reduktionen af ​​eksekveret VM-instruktioner vil sandsynligvis forbedre hastigheden af ​​den registerbaserede VM betydeligt .

Selvfølgelig er denne skelnen kun relevant, når VM'en kører i fortolket tilstand.

5.4. Udførelse

Selvom det er muligt at konfigurere en instans af JVM pr. kørende applikation, konfigurerer vi typisk kun én enkelt instans 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-instanser. Så for at køre en applikation eller en tjeneste, opretter Android OS en ny DVM-instans med en separat proces i delt hukommelsesplads og implementerer koden til at køre applikationen.

6. Konklusion

I denne tutorial 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.


Java tag