Aký je rozdiel medzi DVM a JVM?

1. Úvod

V tomto článku sa budeme venovať rozdielom medzi Virtuálny počítač Java (JVM) a Virtuálny stroj Dalvik (DVM). Najprv sa každý z nich rýchlo pozrieme a potom vykonáme porovnanie.

2. Čo je to runtime?

Runtime systém poskytuje prostredie pre preložiť kód napísaný v jazyku vyššej úrovne, ako je Java, do strojového kódu a pochopiteľné pre centrálnu procesnú jednotku (CPU).

Rozlišujeme tieto typy prekladateľov:

  • Zostavovatelia: Prekladajú priamo montážne kódy do strojového kódu, takže je to rýchle
  • Kompilátory: Preložia kód do kódu zostavy, potom pomocou assemblerov preloží výsledný kód do binárnej podoby. Používanie tejto techniky je pomalé, ale prevedenie je rýchle. Výsledný strojový kód tiež závisí od platformy
  • Tlmočníci: Prekladajú kód pri jeho vykonávaní. Pretože preklad sa deje za behu, vykonávanie môže byť pomalé

3. Virtuálny stroj Java

JVM je virtuálny stroj na spúšťanie desktopových, serverových a webových aplikácií Java. Ďalšou dôležitou vecou Java je, že bola vyvinutá s ohľadom na prenosnosť. Teda JVM bol formovaný tak, aby podporoval viac hostiteľských architektúr a fungoval všade. Pre vstavané zariadenia je to však príliš ťažké.

Java má aktívnu komunitu a bude sa aj v budúcnosti široko využívať. HotSpot je navyše referenčnou implementáciou JVM. Rovnako existuje aj viac ako päť ďalších implementácií udržiavaných komunitou otvorených zdrojov.

S novým vydaním založeným na kadencii dostávajú Java a JVM nové aktualizácie každých šesť mesiacov. Môžeme napríklad uviesť zoznam návrhov na ďalšie vydania, ako napríklad Foreign-Memory Access a Packaging Tool.

4. Virtuálny stroj Dalvik

DVM je virtuálny stroj na spúšťanie aplikácií pre Android. DVM vykonáva dalvický bytecode, ktorý je kompilovaný z programov napísaných v jazyku Java. Upozorňujeme, že DVM nie je JVM.

Jedným z hlavných princípov návrhu DVM je to mal by bežať na mobilných zariadeniach s nízkou pamäťou a načítava sa rýchlejšie v porovnaní s akýmkoľvek JVM. Tento VM je tiež efektívnejší, keď spúšťa viac inštancií na rovnakom zariadení.

V roku 2014 spoločnosť Google vydala Android Runtime (ART) pre Android 5, ktorý nahradil Dalvik kvôli lepšiemu využitiu batérie batériou. Posledná verzia bola 1.6.0 na Androide 4.4.

5. Rozdiel medzi JVM a DVM

5.1. Architektúra

JVM je virtuálny počítač založený na zásobníku, kde sa všetky aritmetické a logické operácie vykonávajú pomocou operácií push a pop a výsledky sa ukladajú do zásobníka. Zásobník je tiež dátovou štruktúrou na ukladanie metód.

Naopak, DVM je VM založený na registroch. Tieto registre umiestnené v CPU vykonávajú všetky aritmetické a logické operácie. Register je dátová štruktúra na ukladanie operandov.

5.2. Kompilácia

Kód Java je vo vnútri JVM kompilovaný do sprostredkovateľského formátu s názvom Java bytecode (súbory .class). Potom JVM analyzuje výsledný bajtový kód Java a preloží ho do strojového kódu.

Na zariadení s Androidom DVM kompiluje kód Java do stredného formátu s názvom Java bytecode (súbor .class), ako je JVM. Potom pomocou nástroja s názvom Dalvik eXchange alebo dx, transformuje bajtový kód Java na bajtkód Dalvik. Nakoniec DVM preloží dalvický bytecode do binárneho strojového kódu.

Oba virtuálne počítače používajú kompilátor Just-In-Time (JIT). Kompilátor JIT je typ kompilátora, ktorý vykonáva kompiláciu počas behu programu.

5.3. Výkon

Ako už bolo vidieť, JVM je virtuálny počítač založený na zásobníku a DVM je virtuálny počítač založený na registroch. Bajtkód VM založený na zásobníku je veľmi kompaktný, pretože umiestnenie operandov je implicitne v zásobníku operandov. Bajtový kód VM založený na registroch vyžaduje, aby boli súčasťou inštrukcie všetky implicitné operandy. To naznačuje, že Veľkosť kódu založeného na registri bude zvyčajne oveľa väčšia ako bajkód založený na zásobníku.

Na druhej strane, virtuálne počítače založené na registroch môžu vyjadrovať výpočty pomocou menšieho počtu pokynov VM ako zodpovedajúci virtuálny počítač založený na zásobníku. Odoslanie inštrukcie VM je nákladné, takže zníženie vykonanýchJe pravdepodobné, že pokyny VM výrazne zlepšia rýchlosť VM založeného na registroch.

Toto rozlíšenie je samozrejme relevantné iba pri spustení VM v interpretovanom režime.

5.4. Exekúcia

Aj keď je možné nastaviť inštanciu JVM na spustenú aplikáciu, zvyčajne nakonfigurujeme iba jednu jedinú inštanciu JVM so zdieľanými procesmi a pamäťovým priestorom na spustenie všetkých aplikácií, ktoré sme nasadili.

Android bol však navrhnutý na spustenie viacerých inštancií DVM. Ak teda chcete spustiť aplikáciu alebo službu, Android OS vytvorí novú inštanciu DVM so samostatným procesom v priestore zdieľanej pamäte a nasadí kód na spustenie aplikácie.

6. Záver

V tomto tutoriáli sme predstavili hlavné rozdiely medzi JVM a DVM. Obe spustené aplikácie VM sú napísané v jazyku Java, ale na zostavenie a spustenie kódu používajú rôzne techniky a procesy.


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