Dalvik

A Dalvik virtuális gép a Google által létrehozott Android operációs rendszer virtuális számítógépe (VM). Ez az a szoftver, amely futtatja a programokat az Android OS-sel ellátott készülékeken. Emiatt nyugodtan mondhatjuk, hogy a Dalvik szerves részét képezi az Android OS-nek, mely leginkább a mobiltelefonokon és táblagépeken használatos. Ezen a készülékeken futó programok legtöbbször Java nyelven íródnak, és első lépésben Java bájtkódra fordulnak. Ezután a Java virtuális gép számára könnyen feldolgozható .class fájlról a Dalvik számára feldolgozható .dex fájlra konvertálódnak, még mielőtt feltelepülnének az őket futtató eszközre. A .dex (Dalvik executable) fájlformátumot úgy tervezték, hogy megfelelően fusson a korlátozott erőforrással (memória és processzor) rendelkező készülékeken is.

Dalvik
FejlesztőDan Bornstein
OS-családLinux kernel
KernelJava virtuális gép
LicencApache Licenc
WeboldalDalvik

A Dalvik szabad szoftver. Eredetileg Dan Bornstein írta, és egy Eyjafjörður-ben található Dalvík nevű halászfaluról nevezte el, ahol a felmenői éltek.[1][2]

Architektúra

A Java virtuális gépektől eltérően, melyek verem alapú gépek, a Dalvik virtuális gép regiszter-bázisú architektúrán alapszik.

A dx eszköz segítségével történik a Java .class file-ok (nem minden class file) konvertálása .dex kiterjesztésre. Egy .dex file-ban több osztály is szerepelhet. A többször előforduló stringek és egyéb konstansok, melyek több osztályban is szerepelhetnek egyetlenegyszer kerülnek a .dex file kimenetébe, az optimális méret elérésének a céljából. A Java bájtkód emellett még egy speciális utasításkészletté is konvertálódik, melyet a Dalvik virtuális gép használ. Egy tömörítetlen .dex file méretben csupán pár százalékkal kisebb egy ugyanazon .class fileokat tartalmazó .jar (Java Archive) formátumtól.[3]

A futtatható dalvik állományok módosítására lehetőség van az eszközre történő telepítés után is. A további optimalizáció elérésének érdekében lehetőségünk van, bájt sorrend felcserélésére egyes adatok esetében, egyszerű adatszerkezetek és függvény könyvtárak inline linkelésére, és az üres osztály objektumok zárolására.

Az Android 2.2 óta, a Dalvik rendelkezik futásidejű fordítóval.[4] A JIT fordítók lényege, hogy nem egyszerre fordítja le az alkalmazást, hanem futás közben részenként, ezzel jelentős akár három-, négyszeres gyorsulást is el lehet érni egy-egy alkalmazás esetében.

Mivel az alacsony memória követelmények elérése a cél, a Dalvik különbözik a többi hagyományosnak nevezett virtuális géptől:[5]

  • A virtuális gép forrásából eltávolították a feleslegesnek vélt részeket, hogy kevesebb helyet foglaljon.
  • A constant pool táblát módosították, hogy csak 32 bites indexeket használjon, hogy egyszerűsítse az interpreter munkáját.
  • A standard Java bájtkód 8 bites utasításokkal végez verem műveleteket. Lokális változók esetén ez azt jelenti, hogy külön utasításra van szükség az operandus verembe írásához vagy a kiolvasásához. A Dalvik ehelyett saját 16 bites utasításkészlettel rendelkezik, amely a lokális változókkal külön utasítások felhasználása nélkül is tud dolgozni. A lokális változók azonosítása általában egy 4 bites "virtuális-regiszteren" keresztül történik. Ezen trükk segítségével csökkent a Dalvik által végrehajtott utasítások száma és nőtt az interpreter sebessége is.

Ráadásul a Google szerint, a Dalvik gépet úgy alkották meg, hogy hatékonyan tudjon egy eszközön több példányban is futni.[6]

Teljesítmény

Napjainkban is vita folyik arról, hogy mely gépek a jobbak, a verem-alapúak vagy a regiszter-alapúak.[7]

Általában, a verem alapú gépeknek szükségük van utasítások használatára ahhoz, hogy adatot tudjanak a veremből betölteni és módosítani, és emiatt sokkal több utasítást használnak ugyanazon magasabb szintű kód végrehajtásához, mint egy regiszter alapú gép, viszont utóbbi gép esetén az utasításoknak be kell kódolniuk az opkódba a forrás és cél regisztereket is, így ezeknél általában nagyobb méretű kód keletkezik. Ezen különbségek főként a VM interpreter számára fontosak, mivel a méret és egyéb tényező releváns a futásidejű fordításnál (just-in-time compilation).

Viszont az Oracle (amely a Sun felvásárlása óta a Java technológia tulajdonosa) által végrehajtott ARM alapon nyugvó benchmark tesztek esetében megállapítható, hogy az Android 2.2 két-, háromszor lassabb eredményt produkált, mint a hasonló Java SE embedded.[8]

Osztálykönyvtár

A Dalvik nem igazodik a Java SE, sem a Java ME osztálykönyvtárakhoz [9][10] (például, Java ME osztályok, AWT vagy Swing sem támogatott). Ehelyett saját könyvtárrendszerrel dolgozik[11] mely az Apache Harmony Java megvalósításának egy részhalmazára támaszkodik.

Licenc és szabadalom

A Dalvik az Apache Licenc 2.0 feltételei alapján jelent meg.[12] A Google állítása szerint a Dalvik egy clean-room implementációja a standard Java Runtime-nak és nem egy Java Runtime-ra támaszkodó fejlesztés, amely nem sértett meg egyetlen szerzői-jog megszorítást, sem a Java Runtime, sem a standard Java változat esetében sem.[13] Ugyanakkor a Google állítása, miszerint a Dalvik implmentációja egy Java runtime clean-room implementáció, vitatott mind az Oracle, mind jópár bíráló által.[14]

2010. augusztus 12-én az Oracle cég, mely 2009. áprilisától a Sun Microsystems és ezen kívül a Java szerzői jogainak a tulajdonosa, beperelte a Google céget, mert azt állította, hogy az megsértette a szerzői jogokat és a szabadalmakat. Az Android fejlesztői azt állították, hogy a Google tudatosan és ismételten szándékosan szegte meg az Oracle Java-vonatkozású szerzői jogait.[15][16][17]

Nem Android platformon

2011-ben, a Myriad Group által szoftverfejlesztő cég bejelentette az "Alien Dalvik"-ot, amely egy Dalvik virtuális gép portolása nem Android platformokra.[18][19]

Kapcsolódó szócikkek

Jegyzetek

További információk

Fordítás

Ez a szócikk részben vagy egészben a Dalvik_(software) című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.