art amnho android dalvik android-runtime dexopt dex2oat

art amnho android



Diferencia entre dexopt y dex2oat? (1)

dexopt realiza algunas optimizaciones en el archivo dex. Hace cosas como reemplazar una instrucción de invocación virtual con una versión optimizada que incluye el índice vtable del método que se llama, para que no tenga que realizar una búsqueda de método durante la ejecución.

El resultado de dexopt es un archivo odex (dex optimizado). Esto es muy similar al archivo dex original, excepto que utiliza algunos códigos de operación optimizados, como la instrucción virtual de invocación optimizada.

dex2oat toma un archivo dex y lo compila. El resultado es esencialmente un archivo elf que luego se ejecuta de forma nativa. Entonces, en lugar de tener un bytecode interpretado por una máquina virtual, ahora tiene un código nativo que el procesador puede ejecutar de forma nativa. Esto se llama compilación AOT (anticipación).

Ambas herramientas se ejecutan normalmente en el momento de la instalación en el dispositivo .

Otro factor a tener en cuenta es que dalvik usó un compilador JIT (just-in-time), lo que significa que también fue capaz de compilar bytecode en código nativo. Sin embargo, la diferencia principal es que ART compila todo antes de tiempo, mientras que dalvik solo compiló un subconjunto del bytecode utilizando heurística para detectar el código que se ejecutó con mayor frecuencia, y compiló durante la ejecución.

Google está moviendo de Dalvik a ART (Android Runtime).

Intentaba entender cómo mejorará el rendimiento.

La mejor explicación que encontré es la siguiente imagen:

Uno de los componentes principales que ha cambiado es dexopt a dex2oat .

Ya que no tengo mucha idea sobre esto, ¿alguien puede explicar la diferencia y cómo esto mejorará el rendimiento?