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.
Czy możesz udostępnić źródło tego obrazu? – Owen
@Owen http://pl.wikipedia.org/wiki/File:ART_view.png –