Android Runtime ( ART ) es un entorno de ejecución de aplicaciones utilizado por el sistema operativo Android . Al reemplazar a Dalvik , la máquina virtual de proceso utilizada originalmente por Android, ART realiza la traducción del código de bytes de la aplicación en instrucciones nativas que luego son ejecutadas por el entorno de ejecución del dispositivo. [2]
Android 2.2 "Froyo" trajo la compilación justo a tiempo (JIT) basada en trazas a Dalvik, optimizando la ejecución de aplicaciones perfilando continuamente las aplicaciones cada vez que se ejecutan y compilando dinámicamente segmentos cortos de su código de bytes ejecutados con frecuencia en código de máquina nativo . Mientras Dalvik interpreta el resto del código de bytes de una aplicación, la ejecución nativa de esos segmentos cortos de código de bytes, llamados "rastros", proporciona mejoras significativas en el rendimiento. [3] [4]
A diferencia de Dalvik, ART introduce el uso de compilación anticipada (AOT) al compilar aplicaciones completas en código de máquina nativo tras su instalación. Al eliminar la interpretación de Dalvik y la compilación JIT basada en seguimiento, ART mejora la eficiencia de ejecución general y reduce el consumo de energía, lo que resulta en una mayor autonomía de la batería en los dispositivos móviles . Al mismo tiempo, ART ofrece una ejecución más rápida de aplicaciones, mecanismos mejorados de asignación de memoria y recolección de basura (GC), nuevas funciones de depuración de aplicaciones y perfiles de aplicaciones de alto nivel más precisos. [2] [5] [6]
Para mantener la compatibilidad con versiones anteriores , ART utiliza el mismo código de bytes de entrada que Dalvik, suministrado a través de archivos .dex estándar como parte de archivos APK , mientras que los archivos .odex se reemplazan con ejecutables de formato ejecutable y vinculable (ELF). Una vez que se compila una aplicación utilizando la utilidad dex2oat en el dispositivo de ART , se ejecuta únicamente desde el ejecutable ELF compilado; Como resultado, ART elimina varios gastos generales de ejecución de aplicaciones asociados con la interpretación de Dalvik y la compilación JIT basada en seguimiento. Una desventaja de ART es que se requiere tiempo adicional para la compilación cuando se instala una aplicación, y las aplicaciones ocupan un poco más de almacenamiento secundario (generalmente memoria flash ) para almacenar el código compilado. [2] [5] [6]
Android 4.4 "KitKat" introdujo una vista previa de la tecnología ART como un entorno de ejecución alternativo a Dalvik, que seguía siendo la máquina virtual predeterminada. [7] [8] En la siguiente versión importante de Android, Android 5.0 "Lollipop" , Dalvik fue reemplazado por completo por ART.
Android 7.0 "Nougat" cambió su Java Runtime Environment del descontinuado Apache Harmony a OpenJDK , introduciendo un compilador JIT con perfilado de código para ART, que le permite mejorar constantemente el rendimiento de las aplicaciones de Android mientras se ejecutan. [9] El compilador JIT complementa el compilador AOT de ART, ayudando a mejorar el rendimiento en tiempo de ejecución y ahorrar espacio de almacenamiento al identificar el "código activo" (código que se usa con frecuencia, se ejecuta en el subproceso de la interfaz de usuario o afecta el tiempo de inicio), en el que compila el compilador AOT. código de máquina mientras el dispositivo está inactivo y cargándose. El código utilizado con menos frecuencia se basa en la compilación JIT. [10] [11]
Android 9 "Pie" redujo la cantidad de almacenamiento utilizado por los APK mediante el uso de archivos de código de bytes comprimidos , y los datos del perfilador se pueden cargar en los servidores de Google Play para incluirlos con aplicaciones cuando los usuarios los descargan con un dispositivo similar, lo que acorta el tiempo de descarga de Google Play. hasta en un 40%. Los perfiles en la nube de Google Play permiten optimizar las aplicaciones durante la instalación, lo que ayuda a evitar los problemas de rendimiento iniciales presentes en Android 7.0 a 8.1. [12]
En julio de 2021 [13] se introdujo el concepto de perfiles de referencia. Los perfiles de referencia son perfiles ART que definen métodos y clases que deben someterse a una compilación AOT desde el primer lanzamiento de una aplicación y son compatibles con Android 7.0 y versiones posteriores. Proporcionan una funcionalidad similar a los perfiles en la nube de Google Play de Android 9 cuando no están disponibles y se fusionan automáticamente con los perfiles en la nube cuando están disponibles. [14]
ART se actualizó con un nuevo recolector de basura (GC) que utiliza la llamada al sistema userfaultfd de Linux en Android 13 . [15] [16] [17] Reduce la presión de la memoria, el tamaño del código compilado y los bloqueos , y evita el riesgo de cerrar aplicaciones debido a la poca memoria durante la recolección de basura . [17] Otros cambios también mejoran el inicio de la aplicación, reducen los bloqueos y mejoran el rendimiento. [17] Debido al proyecto Mainline, ART de Android 12 también se actualizará. [15]