La evolución de los métodos de compilación de Dalvik y ART y el impacto de la compilación híbrida de Android N en los hotfixes

Introducción

ARTE 和 Dalvik

Android Runtime (ART) es un tiempo de ejecución administrado que utilizan las aplicaciones y algunos servicios del sistema en Android. ART y su predecesor, Dalvik, se crearon originalmente para el proyecto de Android. Como tiempo de ejecución, ART puede ejecutar archivos ejecutables de Dalvik y seguir la especificación de código de bytes Dex.
ART y Dalvik son tiempos de ejecución compatibles que ejecutan el código de bytes Dex, por lo que las aplicaciones desarrolladas para Dalvik también pueden funcionar en el entorno ART. Sin embargo, algunas de las tecnologías utilizadas por Dalvik no son adecuadas para ART.

JTI 和 AOT

En Android, las clases de Java se convierten en bytecode DEX. El código de bytes DEX se convierte en código de máquina a través de ART o Dalvik.
El método de compilación para convertir el código de bytes DEX en código de máquina es diferente entre ART y Dalvik: Dalvik usa la compilación JIT (Just in time) y ART usa la compilación AOT (Ahead of time).

Just In Time (JIT)
utiliza el compilador JIT de Dalvik, que cada vez que se ejecuta la aplicación traduce parte del código de bytes de Dalvik a código de máquina en tiempo real. Durante la ejecución del programa, se compila y almacena en caché más código. Dado que JIT solo traduce parte del código, consume menos memoria y ocupa menos espacio de almacenamiento físico.
Ahead Of Time (AOT)
ART tiene incorporado un compilador Ahead-of-Time. Durante la instalación de la aplicación, tradujo el código de bytes DEX a código de máquina y lo almacenó en la memoria del dispositivo. Este proceso solo ocurre cuando la aplicación está instalada en el dispositivo. Dado que la compilación JIT ya no es necesaria, la velocidad de ejecución del código es mucho más rápida.

La máquina virtual ART se ha convertido en un modo híbrido AOT + JIT después de que el modo de compilación sea 7.0.

Por que necesito entender

Debido a que las tecnologías como la reparación en caliente en Android se verán afectadas por el método de compilación, el antiguo método de reparación en caliente fallará. El impacto específico se puede ver en este artículo sobre el impacto del Hotfix de Tinker , la compilación híbrida de Android N y el análisis en profundidad del impacto del Hot Patch , la estrategia de compatibilidad de Hotfix de Android Problema CLASS_ISPREVERIFIED , otros cargos o menos características no se analizan primero Arriba.

Evolución y diferencia

Android 4.x (Intérprete + JIT)

Principio: por lo general, el código se ejecuta a través del intérprete, pero el hot trace ejecutará JIT para una compilación instantánea.
Ventajas: menor
consumo de memoria . Desventajas: consumo de energía (después de salir de la aplicación, la compilación se repetirá la próxima vez), se congela (cuando se compila JIT)

Android 5.0 / 5.1 / 6.0 (intérprete + AOT)

Principio: en el modo AOT, todas las compilaciones se completarán cuando se instale la aplicación.
Ventajas: Buen rendimiento
Desventajas: La instalación de la aplicación lleva mucho tiempo y ocupa mucho espacio de almacenamiento.

Android 7.0 / 7.1 ART presenta un nuevo modo híbrido (Intérprete + JIT + AOT)

Principio: la aplicación no se compila durante la instalación, por lo que la velocidad de instalación es rápida.
Al ejecutar la aplicación, primero vaya al intérprete, y luego las funciones activas serán reconocidas, compiladas por JIT, almacenadas en la caché del código jit y se generará un archivo de perfil (grabando información de función activa).
Cuando el teléfono ingresa al estado de carga e inactivo, el sistema escaneará el archivo de perfil en el directorio de la aplicación a intervalos regulares y ejecutará la compilación AOT (Google lo llama oficialmente compilación guiada por perfil).
Ya sea el código binario compilado por jit o el código binario compilado por AOT, la diferencia de rendimiento entre ellos no es grande porque usan el mismo compilador de optimización para la compilación.
Ventajas: la velocidad de instalación de la aplicación es rápida y ocupa menos almacenamiento (solo compila funciones activas).
Desventajas: Las primeras ejecuciones serán más lentas, solo cuantas más operaciones del usuario, el rendimiento se mantenga después de que se compilen jit y AOT.

Otra comprensión de Android 7.0 / 7.1 / N

Android N presenta un tiempo de ejecución híbrido que incluye compilación, interpretación y JIT (Just In Time) para lograr el mejor compromiso entre el tiempo de instalación, el uso de memoria, el consumo de batería y el rendimiento.

ART es una de las características principales introducidas en Android KitKat (Nota del traductor: Android 4.0) y establecida como la solución predeterminada en Lollipop (Nota del traductor: Android 5.0) Era un nuevo tiempo de ejecución en ese momento. ART reemplazó a Dalvik, pero el primero aún mantiene la compatibilidad a nivel de código de bytes con el segundo porque el primero todavía ejecuta archivos DEX. Una de las principales características de ART es la compilación AOT de la aplicación durante la instalación. La principal ventaja de este enfoque es que el código nativo generado por la optimización tiene un mejor rendimiento y requiere menos potencia para ejecutarse. La desventaja es el espacio y el tiempo necesarios para instalar los archivos. En Lollipop y Marshmallow (Nota del traductor: Android 6.0), las aplicaciones grandes tardan varios minutos en instalarse.

La vista previa para desarrolladores de Android N incluye un tiempo de ejecución de modo mixto. La aplicación no se compila durante la instalación, pero interpreta el código de bytes, por lo que se puede iniciar rápidamente. Hay un intérprete nuevo y más rápido en ART, que se completa con un nuevo JIT, pero la información de este JIT no es persistente. En cambio, el código se analiza durante la ejecución y se guardan los resultados del análisis. Luego, cuando el dispositivo está inactivo y se está cargando, ART realizará una compilación basada en análisis para el "código activo", y no se compilarán otros códigos. Para obtener un mejor código, ART utiliza varias técnicas, incluida la inserción profunda.

Puede compilar la misma aplicación varias veces, o encontrar una ruta de código "caliente" o realizar nuevas optimizaciones en el código compilado, dependiendo de los datos de análisis del analizador en la ejecución posterior. Este paso todavía se conoce como AOT para abreviar, que puede entenderse como "compilación todo el tiempo".

Las ventajas totales de este uso mixto de AOT, interpretación y estrategia JIT son las siguientes.

  • Incluso para aplicaciones grandes, el tiempo de instalación se puede reducir a unos pocos segundos.
  • Las actualizaciones del sistema se pueden instalar más rápido porque no es necesario optimizar este paso
  • La huella de memoria de la aplicación es menor, en algunos casos se puede reducir en un 50%
  • Desempeño mejorado
  • Menor consumo de batería

En resumen, ART en Android 7.0 / 7.1 combina el JIT de Android 4.x con el AOT de Android 5.x / 6.0, y aprende de las fortalezas de cada uno para obtener un equilibrio entre rendimiento y batería.

La diferencia anterior se cita de la respuesta de Zhihu

Supongo que te gusta

Origin blog.csdn.net/u011148116/article/details/106791704
Recomendado
Clasificación