Mi a különbség a DVM és a JVM között?

1. Bemutatkozás

Ebben a cikkben a Java virtuális gép (JVM) és a Dalvik virtuális gép (DVM). Először mindegyiket megvizsgáljuk, majd összehasonlítást végzünk.

2. Mi a futásideje?

A futásidejű rendszer környezetet biztosít lefordítani a magas szintű nyelven írt kódot, mint a Java, gépi kódra és érthető a központi folyamategység (CPU) által.

Meg tudjuk különböztetni az ilyen típusú fordítókat:

  • Összeszerelők: Közvetlenül lefordítják az összeállítási kódokat gépi kódokká, így gyors
  • Fordítók: Lefordítják a kódot összeállítási kódgá, majd az összeállítók segítségével fordítja le a kapott kódot binárisra. Ennek a technikának a használata lassú, de a végrehajtás gyors. A kapott gépi kód emellett platformfüggő
  • Tolmácsok: A kódot végrehajtás közben lefordítják. Mivel a fordítás futás közben történik, a végrehajtás lassú lehet

3. Java virtuális gép

A JVM egy virtuális gép Java asztali, szerver és webes alkalmazások futtatásához. A Java másik fontos eleme, hogy a hordozhatóságot szem előtt tartva fejlesztették ki. Így, a JVM úgy lett kialakítva, hogy több gazdagép architektúrát támogasson és mindenhol fusson. De túl nehéz a beágyazott eszközök számára.

A Java aktív közösséggel rendelkezik, és a jövőben is széles körben fogják használni. Ezenkívül a HotSpot a JVM referencia megvalósítása. Emellett több mint öt másik megvalósítást is fenntart az Open Source Community.

Az új kadencia alapú kiadással a Java és a JVM félévente új frissítéseket kap. Például felsorolhatunk néhány javaslatot a következő kiadásokra, mint például a Foreign-Memory Access és a Packaging Tool.

4. Dalvik virtuális gép

A DVM egy virtuális gép az Android alkalmazások futtatásához. A DVM végrehajtja a Dalvik bytecode-ot, amely a Java nyelven írt programokból áll össze. Vegye figyelembe, hogy a DVM nem JVM.

A DVM egyik legfontosabb tervezési alapelve az alacsony memóriájú mobileszközökön kell futnia és bármely JVM-hez képest gyorsabban betöltődik. Ez a virtuális gép akkor is hatékonyabb, ha több példányt futtat ugyanazon az eszközön.

2014-ben a Google kiadta az Android Runtime (ART) alkalmazást az Android 5-höz, amely a Dalvik helyébe lépett az alkalmazás teljesítményének javítása érdekében. Az utolsó verzió 1.6.0 volt az Android 4.4-en.

5. Különbség a JVM és a DVM között

5.1. Építészet

A JVM egy verem alapú virtuális gép, ahol az összes aritmetikai és logikai műveletet push és pop operandusokon keresztül hajtják végre, és az eredményeket a veremben tárolják. A verem a metódusok tárolására szolgáló adatstruktúra is.

Ezzel ellentétben a DVM regiszter alapú virtuális gép. Ezek a CPU-ban található regiszterek elvégzik az összes számtani és logikai műveletet. A regiszter az operandusok tárolására szolgáló adatstruktúra.

5.2. Összeállítás

A Java kódot a JVM-en belül fordítják le egy Java bytecode nevű közvetítő formátumra (.class fájlok). Aztán a JVM elemzi a kapott Java bájtkódot és lefordítja gépi kódra.

Android eszközön a DVM a Java kódot egy Java bytecode (.class fájl) nevű köztes formátumba fordítja, mint a JVM. Ezután az úgynevezett eszköz segítségével A Dalvik eXchange vagy dx átalakítja a Java bájtkódot Dalvik bájtkóddá. Végül, a DVM lefordítja a Dalvik byte-kódot bináris gépi kódra.

Mindkét virtuális gép a Just-In-Time (JIT) fordítót használja. A JIT Compiler egy olyan fordító, amely a fordítást futás közben hajtja végre.

5.3. Teljesítmény

Mint korábban láttuk, a JVM egy verem alapú virtuális gép, a DVM pedig egy regiszter alapú virtuális gép. A verem alapú virtuális gép bájtkódja nagyon kompakt, mivel az operandusok helye implicit módon az operandus veremben van. A regisztráció alapú virtuális gép bycecode megköveteli, hogy az összes implicit operandus része legyen egy utasításnak. Ez azt jelzi, hogy a A regisztráció alapú kódméret általában sokkal nagyobb lesz, mint a Stack alapú bájtkód.

Másrészt a regiszter alapú virtuális gépek kevesebb virtuális gép utasítás használatával fejezhetik ki a számításokat, mint a megfelelő verem alapú virtuális gépek. A virtuális gép utasítása költséges, tehát a kivégzés csökkentéseA virtuális gép utasításai valószínűleg jelentősen javítják a regiszter alapú virtuális gép sebességét.

Természetesen ez a megkülönböztetés csak akkor releváns, ha a virtuális gépet értelmezett módban futtatja.

5.4. Végrehajtás

Bár lehetséges a JVM példányának beállítása futó alkalmazásonként, általában csak egy megosztott folyamatokkal és memóriaterülettel rendelkező JVM egyetlen példányát konfiguráljuk az összes telepített alkalmazás futtatásához.

Az Android azonban több DVM-példány futtatására készült. Tehát egy alkalmazás vagy szolgáltatás futtatásához a Az Android OS új DVM-példányt hoz létre, külön eljárással a megosztott memóriaterületen, és telepíti a kódot az alkalmazás futtatásához.

6. Következtetés

Ebben az oktatóanyagban bemutattuk a fő különbségeket a JVM és a DVM között. Mindkét virtuális gép Java-ban írt alkalmazásokat futtat, de különböző technikákat és folyamatokat használnak a kód összeállításához és futtatásához.