Android runtime (ART) es el tiempo de ejecución administrado que usan las aplicaciones y algunos servicios de sistema en Android. ART y su predecesor Dalvik fueron creados originalmente específicamente para el proyecto Android. ART como tiempo de ejecución ejecuta el formato DalvikExecutable y la especificación de código de bytes Dex.
ART y Dalvik son tiempos de ejecución compatibles que ejecutan código de bytes Dex, por lo que las aplicaciones desarrolladas para Dalvik deberían funcionar cuando se ejecutan con ART. Sin embargo, algunas técnicas que funcionan en Dalvik no funcionan en el ARTE. Para obtener información sobre los problemas más importantes, consulta Verificar el comportamiento de la aplicación en el tiempo de ejecución de Android (ART).
Características de ART
Estas son algunas de las principales características implementadas por ART.
Compilación anticipada (AOT)
ART presenta la compilación anticipada (AOT), que puede mejorar el rendimiento de las aplicaciones. ART también tiene una verificación de tiempo de instalación más estricta que Dalvik.
En el momento de la instalación, ART compila aplicaciones utilizando la herramienta on-devicedex2oat. Esta utilidad acepta archivos DEX como entrada y genera un ejecutable de aplicación compilado para el dispositivo de destino. La utilidad debería ser capaz de compilar todos los archivos DEX válidos sin dificultad. Sin embargo, algunas herramientas de procesamiento posterior producen archivos no válidos que pueden ser tolerados por Dalvik pero que no pueden ser compilados por ART. Para obtener más información, consulte Abordar problemas de recolección de basura.
Recolección de basura mejorada
La recolección de basura (GC) consume muchos recursos, lo que puede afectar el rendimiento de una aplicación,lo que resulta en una pantalla entrecortada, una respuesta deficiente de la interfaz de usuario y otros problemas. El ARTE mejora la recolección de basura de varias maneras:
- Diseño principalmente concurrente con una sola pausa GC
- Copia concurrente para reducir el uso de memoria de fondo y la fragmentación
- La longitud de la pausa GC es independiente del tamaño del montón
- Colector con menor tiempo total de GC para el caso especial de limpieza de objetos de corta duración asignados recientemente
- Ergonomía mejorada de recolección de basura,
GC_FOR_ALLOC
eventos extremadamente raros en casos de uso típicos
Mejoras de desarrollo y depuración
ART ofrece una serie de funciones para mejorar el desarrollo y la depuración de aplicaciones.
Compatibilidad con el generador de perfiles de muestreo
Históricamente, los desarrolladores han utilizado Traceviewtool (diseñado para la ejecución de aplicaciones de rastreo) como generador de perfiles. Si bien Traceview proporciona información útil, sus resultados en Dalvik han sido sesgados por la sobrecarga de llamadas por método, y el uso de la herramienta afecta notablemente el rendimiento en tiempo de ejecución.
ART añade soporte para un generador de perfiles de muestreo dedicado que no tiene estas limitaciones. Esto proporciona una vista más precisa de la ejecución de la aplicación sin ralentización significativa. Se agregó soporte de muestreo a Traceview forDalvik en la versión KitKat.
Compatibilidad con más funciones de depuración
ART admite una serie de nuevas opciones de depuración, en particular en la funcionalidad relacionada con la colección de monitores y garbage. Por ejemplo, puede:
- Vea qué bloqueos se mantienen en las trazas de pila y, a continuación, vaya al hilo que contiene un bloqueo.
- Pregunte cuántas instancias en vivo hay de una clase dada, pida ver las instancias y vea qué referencias mantienen activo un objeto.
- Filtrar eventos (como punto de interrupción) para una instancia específica.
- Vea el valor devuelto por un método cuando sale (usando eventos «método-salida»).
- Configure field watchpoint para suspender la ejecución de un programa cuando se accede a un campo específico y / o se modifica.
Detalle de diagnóstico mejorado en excepciones e informes de fallos
El ARTE le proporciona la mayor cantidad de contexto y detalle posible cuando ocurren excepciones en tiempo de ejecución. El ARTE proporciona detalles de excepción ampliados para java.lang.ClassCastException
,java.lang.ClassNotFoundException
y java.lang.NullPointerException
.(Versiones posteriores de Dalvik proporcionaron detalles de excepción expandidos para java.lang.ArrayIndexOutOfBoundsException
y java.lang.ArrayStoreException
, que ahora incluyen el tamaño de la matriz y el desplazamiento fuera de límites, y ART hace esto también.)
Por ejemplo, java.lang.NullPointerException
ahora muestra información sobre lo que la aplicación estaba tratando de hacer con el puntero nulo,como el campo en el que la aplicación estaba tratando de escribir o el método al que estaba tratando de llamar. Estos son algunos ejemplos típicos:
java.lang.NullPointerException: Attempt to write to field 'intandroid.accessibilityservice.AccessibilityServiceInfo.flags' on a null objectreference
java.lang.NullPointerException: Attempt to invoke virtual method'java.lang.String java.lang.Object.toString()' on a null object reference
ART también proporciona información de contexto mejorada en los informes de fallos nativos de la aplicación, al incluir información de pila nativa y de Java.