Dalvik (oprogramowanie) - Dalvik (software)
Pierwotny autor (autorzy) | Dan Bornstein |
---|---|
Magazyn | |
System operacyjny | Jądro Linuksa |
Platforma | Android |
Następca | Środowisko wykonawcze Androida |
Rodzaj | Maszyna wirtualna |
Licencja | Licencja Apache 2.0 |
Strona internetowa | źródło |
Dalvik to maszyna wirtualna (VM) z przerwanymi procesami w systemie operacyjnym Android, która wykonuje aplikacje napisane dla systemu Android. (Format kodu bajtowego Dalvik jest nadal używany jako format dystrybucji, ale w nowszych wersjach systemu Android nie jest już używany w czasie wykonywania.) Dalvik był integralną częścią stosu oprogramowania Android w (obecnie nieobsługiwanym) systemie Android w wersji 4.4 „KitKat” i wcześniejszych, które były powszechnie używane w urządzeniach mobilnych, takich jak telefony komórkowe i tablety , a także w niektórych urządzeniach, takich jak telewizory inteligentne i urządzenia do noszenia . Dalvik jest oprogramowanie open-source , pierwotnie napisany przez Dan Bornstein, który nazwał go po wiosce rybackiej Dalvík w Eyjafjörður , Islandii .
Programy dla Androida są zwykle pisane w Javie i kompilowane do kodu bajtowego dla wirtualnej maszyny Java , który jest następnie tłumaczony na kod bajtowy Dalvik i przechowywany w plikach.dex
( Dalvik EXecutable ) i .odex
( Optimized Dalvik EXecutable ); pokrewne terminy odex i de-odex są powiązane z odpowiednimi konwersjami kodu bajtowego. Kompaktowy format Dalvik Executable jest przeznaczony dla systemów, które są ograniczone pod względem pamięci i szybkości procesora .
Następcą Dalvik jest Android Runtime (ART), który wykorzystuje ten sam kod bajtowy i pliki .dex (ale nie pliki .odex), przy czym sukcesja ma na celu poprawę wydajności, która jest przejrzysta dla użytkowników końcowych . Nowe środowisko uruchomieniowe zostało po raz pierwszy włączone do systemu Android 4.4 „KitKat” jako podgląd technologii i całkowicie zastąpiło Dalvik w nowszych wersjach; Android 5.0 „Lollipop” to pierwsza wersja, w której ART jest jedynym dołączonym środowiskiem wykonawczym.
Architektura
W przeciwieństwie do Java Virtual Machines , które są maszynami stosowymi , Dalvik VM wykorzystuje architekturę opartą na rejestrach, która wymaga mniejszej liczby, zazwyczaj bardziej złożonych, instrukcji maszyny wirtualnej. Programy Dalvik są pisane w języku Java przy użyciu interfejsu programowania aplikacji (API) systemu Android , kompilowane do kodu bajtowego Java i w razie potrzeby konwertowane na instrukcje Dalvik.
Wywołane narzędzie dx
służy do konwersji plików Java .class na format .dex. Wiele klas jest zawartych w jednym pliku .dex. Zduplikowane ciągi i inne stałe używane w wielu plikach klas są uwzględniane tylko raz w danych wyjściowych .dex, aby zaoszczędzić miejsce. Kod bajtowy Java jest również konwertowany na alternatywny zestaw instrukcji używany przez maszynę wirtualną Dalvik. Nieskompresowany plik .dex jest zwykle o kilka procent mniejszy niż skompresowane archiwum Java (JAR) utworzone z tych samych plików .class.
Pliki wykonywalne Dalvik mogą być ponownie modyfikowane po zainstalowaniu na urządzeniu mobilnym. Aby uzyskać dalsze optymalizacje , kolejność bajtów może być zamieniona w niektórych danych, proste struktury danych i biblioteki funkcji mogą być połączone inline , a puste obiekty klas mogą być na przykład zwarte.
Zoptymalizowany pod kątem niskich wymagań pamięciowych, Dalvik ma pewne specyficzne cechy, które odróżniają go od innych standardowych maszyn wirtualnych:
- Maszyna wirtualna została odchudzona, aby zajmowała mniej miejsca.
- Basen stała została zmodyfikowana tak, aby korzystać tylko z 32-bitowych wskaźników w celu uproszczenia tłumacza .
- Standardowy kod bajtowy Java wykonuje 8-bitowe instrukcje stosu. Zmienne lokalne muszą być kopiowane do lub ze stosu operandów za pomocą oddzielnych instrukcji. Zamiast tego Dalvik używa własnego zestawu instrukcji 16-bitowych, który działa bezpośrednio na zmiennych lokalnych. Zmienna lokalna jest zwykle wybierana przez 4-bitowe pole „rejestru wirtualnego”. Zmniejsza to liczbę instrukcji Dalvik i zwiększa szybkość interpretera.
Według Google projekt Dalvik pozwala urządzeniu na wydajne uruchamianie wielu instancji maszyny wirtualnej.
Android 2.2 „Froyo” wprowadził do Dalvik opartą na śledzeniu kompilację just-in-time (JIT) , optymalizując wykonywanie aplikacji poprzez ciągłe profilowanie aplikacji za każdym razem, gdy są uruchamiane i dynamicznie kompilując często wykonywane krótkie segmenty ich kodu bajtowego w natywnym kodzie maszynowym . Podczas gdy Dalvik interpretuje resztę kodu bajtowego aplikacji, natywne wykonywanie tych krótkich segmentów kodu bajtowego, zwanych „śladami”, zapewnia znaczną poprawę wydajności.
Wydajność
Względne zalety maszyn stosowych w porównaniu z podejściami opartymi na rejestrach są przedmiotem ciągłej debaty.
Ogólnie rzecz biorąc, maszyny oparte na stosie muszą używać instrukcji do ładowania danych na stosie i manipulowania tymi danymi, a zatem wymagają więcej instrukcji niż maszyny rejestrujące, aby zaimplementować ten sam kod wysokiego poziomu , ale instrukcje w maszynie rejestrującej muszą kodować źródło i rejestrów docelowych, a zatem wydają się być większe. Ta różnica ma znaczenie dla interpreterów maszyn wirtualnych, dla których wysyłanie kodu operacji jest zwykle kosztowne, wraz z innymi czynnikami podobnymi do kompilacji just-in-time .
Testy przeprowadzone na ARMv7 urządzeń w 2010 roku przez Oracle (właściciel technologii Java) ze standardowymi niegraficznych benchmarków wykazała, że Java HotSpot VM Java SE osadzone się 2-3 razy szybciej niż JIT opartych Dalvik VM z Androida 2.2 (the pierwsze wydanie Androida, które zawierało kompilator JIT). W 2012 r. akademickie testy porównawcze potwierdziły współczynnik 3 między HotSpot i Dalvik na tej samej płycie Androida, zauważając również, że kod Dalvik nie był mniejszy niż Hotspot.
Co więcej, od marca 2014 r. testy porównawcze przeprowadzone na urządzeniu z systemem Android nadal wykazują współczynnik 100 między aplikacjami natywnymi a aplikacją Dalvik na tym samym urządzeniu z systemem Android. Po przeprowadzeniu testów porównawczych przy użyciu wczesnego interpretera z 2009 roku zarówno Java Native Interface (JNI), jak i kod natywny wykazały przyspieszenie o rząd wielkości.
Licencje i patenty
Dalvik jest publikowany na warunkach licencji Apache License 2.0. Niektórzy twierdzą, że Dalvik jest implementacją czystego pokoju, a nie rozwojem na standardowym środowisku wykonawczym Javy, co oznaczałoby, że nie dziedziczy ograniczeń licencyjnych opartych na prawach autorskich ze standardowych lub otwartych środowisk wykonawczych Java. Oracle i niektórzy recenzenci kwestionują to.
12 sierpnia 2010 r. firma Oracle , która w kwietniu 2009 r. przejęła firmę Sun Microsystems i tym samym jest właścicielem praw do oprogramowania Java, pozwała Google w związku z naruszeniem praw autorskich i patentów. Oracle twierdziło, że Google, rozwijając Androida, świadomie, bezpośrednio i wielokrotnie naruszył własność intelektualną Oracle związaną z Javą. W maju 2012 roku ława przysięgłych w tej sprawie uznała, że Google nie naruszyła patentów Oracle, a sędzia procesowy orzekł, że struktura interfejsów Java API używanych przez Google nie podlega prawu autorskiemu. Strony zgodziły się na zero dolarów odszkodowania ustawowego za 9 linijek skopiowanego kodu.
Zobacz też
- Środowisko wykonawcze Androida
- Rozwój oprogramowania na Androida
- Wirtualizacja aplikacji
- Porównanie maszyn wirtualnych aplikacji
- Porównanie Java i Android API
- Dekompilator JEB – dekompilator Dalvik (DEX i APK)
- Maszyna wirtualna Dalvik Turbo – autorska alternatywna implementacja Dalvik
Bibliografia
Zewnętrzne linki
- Kod bajtowy Dalvik – oficjalna dokumentacja zestawu instrukcji na Androida
- Format Dex Executable – oficjalna dokumentacja Androida
- Kompilator JIT dla maszyny wirtualnej Dalvik z systemem Android na YouTube , Google I/O 2010, Ben Cheng i Bill Buzbee
- Dalvik VM Internals , Google I/O 2008, Dan Bornstein
- Pytanie za 800 milionów dolarów: jaka jest różnica między znakiem towarowym a prawem autorskim?