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.