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.
Potresti condividere la fonte di questa immagine? – Owen
@Owen http://en.wikipedia.org/wiki/File:ART_view.png –