Dalvik

A Wikipédiából, a szabad enciklopédiából
Dalvik
Fejlesztő Dan Bornstein
OS-család Linux kernel
Kernel Java virtuális gép
Licenc Apache Licenc
Weboldal 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-el rendelkező 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.

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[szerkesztés | forrásszöveg szerkesztése]

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[szerkesztés | forrásszöveg szerkesztése]

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[szerkesztés | forrásszöveg szerkesztése]

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[szerkesztés | forrásszöveg szerkesztése]

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[szerkesztés | forrásszöveg szerkesztése]

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[szerkesztés | forrásszöveg szerkesztése]

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

  1. Journal entry referencing the source of the name
  2. Google Calling: Inside Android, the gPhone SDK. onlamp.com. (Hozzáférés: 2008. február 5.)
  3. Bornstein, Dan: Presentation of Dalvik VM Internals (PDF). Google, 2008. május 29. (Hozzáférés: 2010. augusztus 16.)
  4. Nexus One Is Running Android 2.2 Froyo. How Fast Is It Compared To 2.1? Oh, Only About 450% Faster, 2010. május 13. (Hozzáférés: 2010. május 21.)
  5. Rose, John: with Android and Dalvik at Google I/O, 2008. május 31. (Hozzáférés: 2008. június 8.)
  6. Google: What is Android?, 2009. április 13. (Hozzáférés: 2009. április 19.)
  7. Shi, Yunhe: Virtual Machine Showdown: Stack Versus Registers, 2005. június 11. (Hozzáférés: 2009. december 22.)
  8. Vandette, Bob: Java SE Embedded Performance Versus Android 2.2. Oracle Corporation, 2010. november 22. (Hozzáférés: 2011. szeptember 4.) „The results show that although Androids new JIT is an improvement over its interpreter only implementation, Android is still lagging behind the performance of our Hotspot enabled Java SE Embedded. As you can see from the above results, Java SE Embedded can execute Java bytecodes from 2 to 3 times faster than Android 2.2.
  9. Google's Android SDK Bypasses Java ME in Favor of Java Lite and Apache Harmony. infoq.com, 2007. november 12. (Hozzáférés: 2009. május 31.) „Instead of providing a full version of the Java SE or Java ME Google has diverged on two fronts. First, a limited subset of the core Java packages is provided. (...) By going this route Android is following in the footsteps of another Google project GWT which uses Java as its development language but does not support the full JDK.”
  10. Alternative to Point2D. Droid Tutorials, 2010. február 12. (Hozzáférés: 2010. február 17.) „Given that AWT is not supported in Android API, the Point2D class, which is useful for writing 2D graphics, is missing either.”
  11. Package Index. Open Handset Alliance. (Hozzáférés: 2013. február 15.)
  12. http://android.git.kernel.org/?p=platform/dalvik.git;a=blob_plain;f=NOTICE;hb=HEAD
  13. Stefano Mazzocchi: Dalvik: how Google routed around Sun’s IP-based licensing restrictions on Java ME, 2007. november 12. (Hozzáférés: 2010. augusztus 16.)
  14. Ed Bott: The real history of Java and Android, as told by Google. ZDNet, 2011. szeptember 8. (Hozzáférés: 2011. november 27.) „The definition of a “clean room” implementation is that the engineers writing the code have no direct exposure to the original, copyrighted material, including code, specifications, and other documentation. That’s a problem for Google, as I noted in yesterday’s post, because there is substantial evidence that the engineers working on the project had direct access to the copyrighted material.
  15. Oracle Sues Google Over Java in Android Devices. digitaltrends.com, 2010. augusztus 13. (Hozzáférés: 2011. augusztus 8.)
  16. James Niccolai: Oracle sues Google over Java use in Android. Computerworld, 2010. augusztus 12. (Hozzáférés: 2010. augusztus 13.)
  17. Mark Hachman: Oracle Sues Google Over Android Java Use. PC Magazine. Ziff Davis, 2010. augusztus 13
  18. http://www.myriadgroup.com/press/news-2011/myriad-announces-alien-dalvik-enables-android-apps-to-run-on-non-android-phones.aspx
  19. http://www.allaboutmeego.com/news/item/12571_Alien_Dalvik_hopes_to_bring_An.php

További információk[szerkesztés | forrásszöveg szerkesztése]

Sablon:Android

Fordítás[szerkesztés | forrásszöveg szerkesztése]

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.