Dalvik (oprogramowanie) - Dalvik (software)

Dalvik
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 .android .com /devices /tech /dalvik /index .html

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

Porównanie architektur Dalvik i ART

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 dxsł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ść

Telefon z zasilaniem Dalvik

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ż

Bibliografia

Zewnętrzne linki