2014-10-08 14 views
30

Google przenosi się z Dalvik do ART (Android Runtime).Różnica między dexopt i dex2oat?

Próbowałem zrozumieć, w jaki sposób poprawi to wydajność.

Najlepszym wyjaśnieniem znalazłem jest poniżej zdjęcie:

Dalvik and ART

Jednym z głównym składnikiem która zmieniła to dexopt do dex2oat.

Ponieważ nie mam pojęcia o nich, czy ktoś może wyjaśnić różnicę i jak to wpłynie na poprawę wydajności?

+0

Czy możesz udostępnić źródło tego obrazu? – Owen

+0

@Owen http://pl.wikipedia.org/wiki/File:ART_view.png –

Odpowiedz

50

dexopt wykonuje pewne optymalizacje na pliku dex. Wymaga to zastąpienia instrukcji wywołania wirtualnego wersją zoptymalizowaną, która zawiera indeks wywołania metody, która jest wywoływana, tak aby nie musiała wykonywać wyszukiwania metody podczas wykonywania.

Wynikiem dexopt jest plik odex (zoptymalizowany deks). Jest to bardzo podobne do oryginalnego pliku dex, z tym że używa niektórych zoptymalizowanych kodów operacyjnych, takich jak zoptymalizowana wirtualna instrukcja invoke.

dex2oat pobiera plik DX i kompiluje go. Wynikiem jest w zasadzie plik elfa, który jest następnie wykonywany natywnie. Zamiast kodu bajtowego, który jest interpretowany przez maszynę wirtualną, ma teraz kod natywny, który może być wykonywany natywnie przez procesor. Nazywa się to kompilacją AOT (z wyprzedzeniem).

Oba narzędzia są zwykle uruchamiane at install time on the device.

Innym czynnikiem, który należy wziąć pod uwagę, jest to, że dalvik używał kompilatora JIT (just-in-time) - co oznacza, że ​​był on również w stanie skompilować kod bajtowy do kodu natywnego. Główną różnicą jest jednak to, że ART kompiluje wszystko z wyprzedzeniem, podczas gdy dalvik kompilował tylko podzbiór kodu bajtowego za pomocą heurystyki, aby wykryć kod, który był najczęściej wykonywany i skompilowany podczas wykonywania.

+0

czy możesz mi powiedzieć, czy ten przekonwertowany plik OAT w formacie elfa jest ostatnim zestawem instrukcji do uruchomienia lub dalszej kompilacji lub optymalizacji? Właściwie to próbuję wykonać analizę statyczną nad plikiem przekonwertowanym owsa, a następnie zmapować instrukcje do oryginalnego śledzenia instrukcji środowiska wykonawczego. I wreszcie możesz mi powiedzieć, które pliki szukać w kodzie źródłowym Androida, aby mieć jasny pomysł? –

+2

Tak, plik owsa jest wykonywany bezpośrednio. Będziesz chciał spojrzeć na projekt artystyczny w AOSP. – JesusFreke

+0

Witam, czy masz pojęcie, gdzie są przechowywane te pliki AOT? Czy to ścieżka/dane/dalvik-cache/prfiles? –