Diferența dintre dexopt și dex2oat? (Programare, Android, Dalvik, Android Runtime, Dexopt, Dex2Oat)

Gokul Nath KP a intrebat.

Google se mută de la Dalvik la ART(Android Runtime).

Încercam să înțeleg, cum va îmbunătăți performanța.

Cea mai bună explicație pe care am găsit-o este imaginea de mai jos:

Una dintre componentele principale care s-a schimbat este dexopt în dex2oat.

Deoarece nu am prea multe idei despre acestea, poate cineva să explice care este diferența și cum se va îmbunătăți performanța?

Comentarii

2 răspunsuri
JesusFreke

dexopt face unele optimizări asupra fișierului dex. Face lucruri cum ar fi înlocuirea unei instrucțiuni de invocare virtuală cu o versiune optimizată care include indexul vtable al metodei care este apelată, astfel încât nu trebuie să efectueze o căutare a metodei în timpul execuției.

Rezultatul operațiunii dexopt este un fișier odex (dex optimizat). Acesta este foarte asemănător cu fișierul dex original, cu excepția faptului că utilizează unele coduri operaționale optimizate, cum ar fi instrucțiunea virtuală optimizată invoke.

dex2oat preia un fișier dex și îl compilează. Rezultatul este, în esență, un fișier elf care este apoi executat nativ. Astfel, în loc să aibă un cod byte care este interpretat de o mașină virtuală, acum are un cod nativ care poate fi executat nativ de către procesor. Acest lucru se numește compilare AOT (ahead-of-time).

Ambele instrumente sunt rulate în mod normal în momentul instalării pe dispozitiv.

Un alt factor care trebuie luat în considerare este faptul că dalvik a folosit un compilator JIT (just-in-time) – ceea ce înseamnă că a fost, de asemenea, capabil să compileze bytecode în cod nativ. Principala diferență este însă că ART compila totul dinainte, în timp ce dalvik a compilat doar un subset de bytecode, folosind euristica pentru a detecta codul care era executat cel mai frecvent, și a compilat în timpul execuției.

Comentarii

  • Da, fișierul oat este executat direct. Ar trebui să vă uitați la proiectul artistic din AOSP. –  > Por JesusFreke.
  • Poate fi o întrebare prostească, dar dacă dex2oat produce un cod nativ care folosește compilarea „Ahead of Time” (AOT), de ce nu se numește dex2aot? Poate fi o greșeală de tipar sau înseamnă ceva cu totul altceva? –  > Por asgs.
  • Fișierele de imagine compilate AOT ale lui Art se numesc fișiere oat. Nu cunosc semnificația/istoria cuvântului „oat”, dar presupun că este o greșeală de ortografie intenționată și creativă a lui aot. –  > Por JesusFreke.
  • Colo, ca să pot fi craetiv, oto! 😉 –  > Por Stéphane Gourichon.
  • @asgs Am găsit această întrebare: Ce înseamnă OAT? –  > Por Franklin Yu.
Ritesh Jha

Android Runtime (ART) este un mediu de execuție a aplicațiilor utilizat de sistemul de operare mobil Android. ART înlocuiește Dalvik, care este mașina virtuală de procesare folosită inițial de Android, și realizează transformarea bytecode-ului aplicației în instrucțiuni native care sunt executate ulterior de mediul de execuție al dispozitivului.

Spre deosebire de Dalvik, care, începând cu Android 2.2 „Froyo”, utilizează compilarea just-in-time (JIT) pentru a compila bytecode-ul de fiecare dată când o aplicație este lansată, ART introduce utilizarea compilării înainte de timp (AOT), efectuând-o la instalarea unei aplicații. Prin reducerea cantității totale de compilare care trebuie efectuată pe parcursul funcționării unei aplicații, se reduce utilizarea procesorului unui dispozitiv mobil și se îmbunătățește durata de funcționare a bateriei. În același timp, ART aduce îmbunătățiri în ceea ce privește performanța, colectarea gunoiului, depanarea și profilarea aplicațiilor.

Pentru a menține compatibilitatea retroactivă, ART utilizează același bytecode de intrare ca și Dalvik, furnizat prin intermediul standardului .dex ca parte a fișierelor APK, în timp ce .odex fișiere sunt înlocuite cu executabile în format ELF (Executable and Linkable Format). Odată ce o aplicație este compilată prin utilizarea utilitarului dex2oat de pe dispozitiv al ART, aceasta este rulată numai din executabilul ELF compilat; această abordare elimină diversele costuri generale implicate de compilarea JIT, dar necesită timp suplimentar pentru compilare atunci când o aplicație este instalată, iar aplicațiile ocupă o cantitate de spațiu puțin mai mare pentru a stoca codul compilat.