Dalvik (software)

Dalvik
Originalautor (en) Dan Bornstein
Repository
Betriebssystem Linux Kernel
Plattform Android
Nachfolger Android -Laufzeit
Typ Virtuelle Maschine
Lizenz Apache -Lizenz 2.0
Webseite Quelle.Android.com/Geräte/Technik/Dalvik/Index.html

Dalvik ist ein abgebrochener Virtuelle Maschine verarbeiten (VM) in Android -Betriebssystem Dadurch werden für Android geschriebene Anwendungen ausgeführt.[1] (Dalvik -Bytecode -Format wird weiterhin als Verteilungsformat verwendet, aber nicht mehr zur Laufzeit in neueren Android -Versionen.) Dalvik war ein wesentlicher Bestandteil des Android -Software -Stacks in der (jetzt nicht unterstützten) Android -Versionen 4.4 "KitKat" und früher, die üblicherweise auf mobilen Geräten verwendet wurden, z. Mobiltelefone und Tablet -Computerund mehr in einigen Geräten wie Smart TVs und Tragfähig. Dalvik ist Quelloffene Software, ursprünglich von Dan Bornstein geschrieben, der es nach dem Fischerdorf von nannte Dalvík in Eyjafjörður, Island.[2][3]

Programme für Android sind üblicherweise in geschrieben Java und zusammengestellt zu Bytecode für die Java virtuelle Maschine, was dann in Dalvik -Bytecode übersetzt und in gespeichert wird .dex (Dalvik ausführbare Datei) und .odex (Optimierte Dalvik Executable) Dateien; verwandte Begriffe ODEX und de-ödex sind mit den jeweiligen Bytecode -Konvertierungen verbunden. Das kompakte Dalvik -ausführbare Format ist für Systeme ausgelegt, die in Bezug Erinnerung und Prozessor Geschwindigkeit.

Der Nachfolger von Dalvik ist Android -Laufzeit (Art), das dieselben Bytecode- und .DEX -Dateien (jedoch nicht .odex -Dateien) verwendet, wobei die Nachfolge auf Leistungsverbesserungen abzielt. Die neue Laufzeitumgebung wurde zum ersten Mal in Android 4.4 "Kitkat" als Technologievorschau,[4][5] und ersetzte Dalvik vollständig in späteren Versionen; Android 5.0 "Lollipop" ist die erste Version, in der Kunst die einzige Laufzeit ist.

Die Architektur

Ein Vergleich von Dalvik und KUNST Architekturen

nicht wie Java virtuelle Maschinen, welche sind Stapelmaschinen, der Dalvik VM verwendet a Registerbasierte Architektur Dies erfordert weniger, typischerweise komplexere Anweisungen für virtuelle Maschine. Dalvik -Programme werden in Java mit dem Android geschrieben Programmierschnittstelle (API), mit Java -Bytecode kompiliert und nach Bedarf in Dalvik -Anweisungen umgewandelt.

Ein Tool namens dx wird verwendet, um Java umzuwandeln .Klasse Dateien in das .dex -Format. Mehrere Klassen sind in einer einzigen .dex -Datei enthalten. Duplikat Saiten und andere in mehreren Klassendateien verwendete Konstanten sind nur einmal in der .dex -Ausgabe eingeschlossen, um den Speicherplatz zu erhalten. Java Bytecode wird auch in eine Alternative umgewandelt Befehlssatz verwendet von der Dalvik VM. Eine unkomprimierte .dex -Datei ist in der Regel nur wenige Prozent kleiner als a komprimiert Java -Archiv (Jar) abgeleitet von den gleichen .class -Dateien.[6]

Die ausführbaren Dalvik -Executables können bei der Installation auf einem mobilen Gerät erneut geändert werden. Um weiter zu gewinnen Optimierungen, Bytebestellung kann in bestimmten Daten ausgetauscht werden, einfach, einfach Datenstrukturen und Funktion Bibliotheken vielleicht verknüpft in der Reiheund leere Klassenobjekte können beispielsweise kurzverkleidet sein.

Dalvik ist für niedrige Speicheranforderungen optimiert und hat einige spezifische Merkmale, die sie von anderen Standard -VMs unterscheiden:[7]

  • Die VM wurde abgeschoben, um weniger Platz zu nutzen.
  • Das ständiger Pool wurde nur so geändert, dass sie nur verwendet werden 32-Bit Indizes, um die zu vereinfachen Dolmetscher.
  • Standard Java -Bytecode ausgeführt 8 Bit Stapelanweisungen. Lokale Variablen müssen durch separate Anweisungen in oder vom Operand Stack kopiert werden. Dalvik verwendet stattdessen seine eigene 16-Bit Anweisungssatz, der direkt in lokalen Variablen funktioniert. Die lokale Variable wird üblicherweise von a ausgewählt 4-Bit Feld "Virtual Register". Dies senkt Dalviks Anweisungen und erhöht seine Dolmetschergeschwindigkeit.

Laut Google ermöglicht das Design von Dalvik ein Gerät, mehrere Instanzen der VM effizient auszuführen.[8]

Android 2.2 "Froyo" gebracht Trace-basierte Just-in-Time-Zusammenstellung (JIT) in Dalvik und optimieren Sie die Ausführung von Anwendungen durch kontinuierlich Profilerstellung Anwendungen jedes Mal, wenn sie dynamisch ausführen Kompilieren häufig ausgeführte kurze Segmente ihres Bytecode in native Maschinensprache. Während Dalvik interpretiert Der Rest der Bytecode der Anwendung, native Ausführung dieser kurzen Bytecode -Segmente, die als "Spuren" bezeichnet werden, bietet erhebliche Leistungsverbesserungen.[9][10][11]

Leistung

Ein dalvikbetriebenes Telefon

Die relativen Verdienste von Stapelmaschinen gegen registrieren-Basierte Ansätze sind Gegenstand einer laufenden Debatte.[12]

Im Allgemeinen müssen Stack-basierte Maschinen verwenden Anweisungen So laden Sie Daten auf den Stapel, manipulieren Sie diese Daten und benötigen somit mehr Anweisungen als Register -Maschinen, um dasselbe zu implementieren High-Level-CodeAber die Anweisungen in einer Registermaschine müssen die Quell- und Zielregister codieren und daher tendenziell größer sind. Dieser Unterschied ist für VM -Dolmetscher von Bedeutung, für die Opcode Der Versand ist tendenziell teuer, zusammen mit anderen Faktoren, die ähnlich relevant sind Just-in-Time-Zusammenstellung.

Tests durchgeführt ARMV7 Geräte im Jahr 2010 von Orakel (Eigentümer der Java-Technologie) mit Standard-nicht-grafischen Java-Benchmarks zeigte die Hotspot Vm von Java SE eingebettet 2–3 -mal schneller sein als die Jit-basierten Dalvik VM von Android 2.2 (Die erste Android -Version, die einen JIT -Compiler enthielt).[13] Im Jahr 2012 bestätigten akademische Benchmarks den Faktor 3 zwischen 3 dazwischen Hotspot und Dalvik auf demselben Android -Board und stellte fest, dass Dalvik -Code nicht kleiner als Hotspot war.[14]

Darüber hinaus ab März 2014, Benchmarks, die auf einem Android -Gerät durchgeführt werden, werden immer noch bis zu einem Faktor 100 zwischen nativen Anwendungen und einer Dalvik -Anwendung auf demselben Android -Gerät angezeigt.[15][Originalforschung?][Unsachgemäße Synthese?] Nach dem Ausführen von Benchmarks mit dem frühen Dolmetscher von 2009 beide beide Java Native Interface (JNI) und der native Code zeigten eine Größenordnung beschleunigt.[16]

Lizenzierung und Patente

Dalvik wird unter den Bestimmungen der veröffentlicht Apache -Lizenz 2.0.[17] Einige sagen, dass Dalvik a ist sauberes Zimmer Implementierung anstelle einer Entwicklung neben einer Standard-Java-Laufzeit, was bedeuten würde, dass sie keine urheberrechtlich geschützten Lizenzbeschränkungen aus der Java Runtimes Standard-Edition oder Open-Source-Aufgabe erben.[18] Orakel Und einige Rezensenten bestreiten dies.[19]

Am 12. August 2010, Orakel, was erworben hat Sun Microsystems Im April 2009 verklagte Google die Rechte an Java wegen behaupteten Verstoßes gegen Urheberrechte und Patente. Oracle behauptete, Google habe bei der Entwicklung von Android, wissentlich direkt und wiederholt, Oracas Java-bezogenes geistiges Eigentum verstoßen.[20][21][22] Im Mai 2012 stellte die Jury in diesem Fall fest, dass Google nicht gegen die Patente von Oracle verstößt, und der Prozessrichter entschied, dass die Struktur der von Google verwendeten Java -APIs nicht urheberrechtlich geschützt war.[23][24] Die Parteien stimmten auf Null -Dollar zu gesetzliche Schäden für 9 Zeilen kopierter Code.[25][26]

Siehe auch

Verweise

  1. ^ "Debugging Art Müllsammlung". Abgerufen 6. Oktober 2015. Die Dalvik-Laufzeit wird nicht mehr verwaltet oder verfügbar [in aktuellen Versionen von Android] und sein Byte-Code-Format wird jetzt von ART verwendet.
  2. ^ Tagebucheintrag Verweisen Sie auf die Quelle des Namens
  3. ^ "Google Calling: In Inside Android, The Gphone SDK". Onlamp.com. Abgerufen 2008-02-05.
  4. ^ Sean Buckley (2013-11-06). ""Art" -Experiment in Android KitKat verbessert die Akkulaufzeit und beschleunigt Apps. ". Engadget. Abgerufen 2014-07-05.
  5. ^ Daniel P. (2013-11-07). "Experimentelle Google Art Runtime in Android KitKat kann zweimal schnellere App -Ausführungen bringen". phonearena.com. Abgerufen 2014-07-05.
  6. ^ Bornstein, Dan (2008-05-29). "Präsentation von Dalvik VM -Interna" (PDF). p. 22. Abgerufen 2010-08-16.
  7. ^ Rose, John (2008-05-31). "Mit Android und Dalvik bei Google I/O". Archiviert von das Original am 2008-06-04. Abgerufen 2008-06-08.
  8. ^ Google (2009-04-13). "Was ist Android?". Abgerufen 2009-04-19. {{}}: |author= hat generischen Namen (Hilfe)
  9. ^ Ben Cheng; Bill Buzbee (Mai 2010). "Ein JIT -Compiler für Androids Dalvik VM" (PDF). Android-App-Developer.co.uk. S. 5–14. Archiviert von das Original (PDF) Am 2015-11-06. Abgerufen 18. März, 2015.
  10. ^ Phil Nickinson (26. Mai 2010). "Google Android Developer erklärt mehr über Dalvik und die JIT in Froyo". androidcentral.com. Abgerufen 8. Juli, 2014.
  11. ^ "Nexus One läuft Android 2.2 Froyo. Wie schnell ist es mit 2,1? Oh, nur etwa 450% schneller". 2010-05-13. Abgerufen 2010-05-21.
  12. ^ Shi, Yunhe; Gregg, David; Beatty, Andrew; Ertl, M. Anton (2005-06-11). "Virtual Machine Showdown: Stack gegen Register" (PDF). Abgerufen 2009-12-22.
  13. ^ Vandette, Bob (2010-11-22). "Java SE eingebettete Leistung gegen Android 2.2". Oracle Corporation. Archiviert von das Original Am 2011-06-28. Abgerufen 2011-09-04. Die Ergebnisse zeigen, dass Androids New JIT zwar eine Verbesserung gegenüber seiner Interpreter -Implementierung darstellt, Android jedoch immer noch hinter der Leistung unseres Hotspots zurückbleibt, das Java SE eingebettet ist. Wie Sie aus den oben genannten Ergebnissen erkennen können, kann Java SE eingebettet Java -Bytecodes von 2 bis 3 -mal schneller ausführen als Android 2.2.
  14. ^ Hyeong-seok oh; Beom-Jun Kim; Hyung-kyu choi; Soo-Mook Moon (2012). Verfahren des 10. Internationalen Workshops über Java -Technologien für Echtzeit- und eingebettete Systeme - JTRES '12. Verband für Rechenmaschinen. p. 115. doi:10.1145/2388936.2388956. ISBN 9781450316880. S2CID 36316611. Im JITC-Modus ist Dakvik jedoch um das 2,9-fache langsamer als Hotspot und seine generierte Codegröße ist aufgrund seiner schlechteren Codequalität und des Trace-Chaining-Codes nicht kleiner als Hotspots.
  15. ^ "Top Andebch Scores". www.eembc.org. Abgerufen 2014-03-23.
  16. ^ Batyuk, Leonid; Schmidt, Aubrey-Derrick; Schmidt, Hans-Gunther; Kamera, Ahmet; Albayrak, Sahin (2009-04-29). Entwickeln und Benchmarking native Linux -Anwendungen auf Android. Vorlesungen des Instituts für Computerwissenschaften, soziale Informatik und Telekommunikationsgenieure. Vol. 7. S. 381–392. Bibcode:2009mmos.book..381b. doi:10.1007/978-3-642-01802-2_28. ISBN 978-3-642-01801-5. S2CID 12131309. Die Ergebnisse zeigen, dass native C -Anwendungen bis zu 30 -mal so schnell sein können wie ein identischer Algorithmus, der in Dalvik VM ausgeführt wird. Java-Anwendungen können zu einer Beschleunigung von bis zu 10-mal werden, wenn JNI verwendet wird.
  17. ^ "Herunterladen des Quellbaums - Android Open Source". Android.git.kernel.org. Archiviert von das Original am 2009-04-17. Abgerufen 2012-06-07.
  18. ^ Garling, Caleb. "Google und Oracle 'Experten' Experten von Androids Java Mimic". Verdrahtet.
  19. ^ Ed Bott (8. September 2011). "Die wirkliche Geschichte von Java und Android, wie von Google erzählt wird". ZDNET. Abgerufen 2011-11-27. Die Definition einer Implementierung von "Clean Room" besteht darin, dass die Ingenieure, die den Code schreiben, nicht direkt mit dem ursprünglichen, urheberrechtlich geschützten Material ausgesetzt sind, einschließlich Code, Spezifikationen und anderer Dokumentation. Dies ist ein Problem für Google, wie ich in der gestrigen Post festgestellt habe, da es erhebliche Beweise dafür gibt, dass die an dem Projekt arbeitenden Ingenieure direkten Zugriff auf das urheberrechtlich geschützte Material hatten.
  20. ^ "Oracle verklagt Google wegen Java in Android -Geräten". digitalTrends.com. 2010-08-13. Abgerufen 2011-08-08.
  21. ^ James Niccolai (2010-08-12). "Oracle verklagt Google wegen Java -Verwendung in Android". Computerwelt. Abgerufen 2010-08-13.
  22. ^ Mark Hachman (2010-08-13). "Oracle verklagt Google wegen Android Java Use". PC Magazine. Ziff Davis.
  23. ^ Josh Lowensohn (23. Mai 2012). "Die Jury beseitigt Google, die Patente von Oracle zu verletzen". ZDNET. Abgerufen 2012-05-25.
  24. ^ Joe Mullin (31. Mai 2012). "Google gewinnt eine entscheidende API -Entscheidung, Oraces Fall dezimiert". ARS Technica. Abgerufen 2012-06-01.
  25. ^ Niccolai, James (20. Juni 2012). "Oracle stimmt dem" Zero' -Schaden in der Google -Klage zu, die Augen ein Berufung ". Abgerufen 2012-06-23.
  26. ^ Adam Outler (16. Mai 2012). "Aktualisieren Sie das Oracle gegen Google -Testversion". Abgerufen 2013-01-18. Ein Hauptanteil der Ansprüche des Orakels basiert auf 9 Codezeilen, die in java.util.arrays.rangecheck () enthalten sind. Hier ist der fragliche Code: ...

Externe Links