2014-10-08 42 views
30

Google si sta spostando da Dalvik a ART (Runtime Android).Differenza tra dexopt e dex2oat?

Stavo cercando di capire come migliorerà le prestazioni.

La spiegazione migliore che ho trovato è l'immagine qui sotto:

Dalvik and ART

Uno dei componenti principali che è cambiato è dexopt-dex2oat.

Dato che non ho molta idea di questi, qualcuno può spiegare la differenza e come questo migliorerà le prestazioni?

+0

Potresti condividere la fonte di questa immagine? – Owen

+0

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

risposta

50

dexopt esegue alcune ottimizzazioni sul file dex. Fa cose come sostituire un'istruzione di invocazione virtuale con una versione ottimizzata che include l'indice vtable del metodo chiamato, in modo che non debba eseguire una ricerca di metodo durante l'esecuzione.

Il risultato di dexopt è un file odex (dex ottimizzato). Questo è molto simile al file dex originale, tranne per il fatto che utilizza alcuni opcode ottimizzati, come l'istruzione virtuale invoke ottimizzata.

dex2oat prende un file dex e lo compila. Il risultato è essenzialmente un file elf che viene quindi eseguito in modo nativo. Quindi, invece di avere un bytecode interpretato da una macchina virtuale, ora ha un codice nativo che può essere eseguito in modo nativo dal processore. Questa è chiamata compilazione AOT (in anticipo).

Entrambi gli strumenti vengono normalmente eseguiti at install time on the device.

Un altro fattore da tenere in considerazione è che dalvik ha utilizzato un compilatore JIT (just-in-time), vale a dire che è stato anche in grado di compilare bytecode su codice nativo. La differenza principale, tuttavia, è che ART compila tutto in anticipo, mentre dalvik ha compilato solo un sottoinsieme del bytecode utilizzando l'euristica per rilevare il codice che è stato eseguito più frequentemente e compilato durante l'esecuzione.

+0

puoi dirmi se questo OF convertito formattato con ELF è l'insieme finale di istruzioni da eseguire o viene eseguita un'ulteriore compilazione o ottimizzazione? In realtà sto cercando di fare qualche analisi statica sul file convertito all'avena e successivamente mappare le istruzioni alla traccia di istruzioni di runtime originale. Infine, puoi dirmi quali file cercare nel codice sorgente di Android per avere un'idea chiara? –

+2

Sì, il file dell'avena viene eseguito direttamente. Ti consigliamo di guardare il progetto artistico in AOSP. – JesusFreke

+0

Ciao, hai idea di dove sono memorizzati questi file AOT? È il percorso/data/dalvik-cache/prfiles? –