Tiempo de ejecución de Android (ART) y Dalvik

El tiempo de ejecución de Android (ART) es el tiempo de ejecución administrado que utilizan las aplicaciones y algunos servicios del sistema en Android. ART y su predecesor Dalvik se crearon originalmente específicamente para el proyecto Android. ART como tiempo de ejecución ejecuta el formato Dalvik Executable y 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 deberían funcionar cuando se ejecutan con ART. Sin embargo, algunas técnicas que funcionan en Dalvik no funcionan en ART. Para obtener información sobre los problemas más importantes, consulte Verificación del comportamiento de la aplicación en el tiempo de ejecución de Android (ART) .

Características del arte

Estas son algunas de las principales funciones implementadas por ART.

Compilación anticipada (AOT)

ART presenta la compilación anticipada (AOT), que puede mejorar el rendimiento de la aplicación. ART también tiene una verificación del tiempo de instalación más estricta que Dalvik.

En el momento de la instalación, ART compila las aplicaciones mediante la herramienta dex2oat del dispositivo. Esta utilidad acepta archivos DEX como entrada y genera un ejecutable de aplicación compilado para el dispositivo de destino. La utilidad debería poder compilar todos los archivos DEX válidos sin dificultad. Sin embargo, algunas herramientas de posprocesamiento producen archivos no válidos que Dalvik puede tolerar pero que ART no puede compilar. 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 da como resultado una visualización entrecortada, una capacidad de respuesta deficiente de la interfaz de usuario y otros problemas. ART mejora la recolección de basura de varias maneras:

  • Mayormente diseño concurrente con una sola pausa de GC
  • Copia simultánea para reducir el uso y la fragmentación de la memoria de fondo
  • La duración de la pausa del GC es independiente del tamaño del almacenamiento dinámico
  • Colector con tiempo total de GC más bajo para el caso especial de limpieza de objetos de vida corta recientemente asignados
  • Se mejoró la ergonomía de la recolección de elementos no utilizados, lo que hace que las recolecciones de elementos no utilizados concurrentes sean más oportunas, lo que hace que los eventos GC_FOR_ALLOC sean extremadamente raros en los 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.

Soporte para perfilador de muestras

Históricamente, los desarrolladores han utilizado la herramienta Traceview (diseñada para rastrear la ejecución de aplicaciones) como generador de perfiles. Si bien Traceview brinda información útil, sus resultados en Dalvik se han visto sesgados por la sobrecarga por llamada de método, y el uso de la herramienta afecta notablemente el rendimiento del tiempo de ejecución.

ART agrega soporte para un generador de perfiles de muestreo dedicado que no tiene estas limitaciones. Esto brinda una vista más precisa de la ejecución de la aplicación sin una ralentización significativa. Se agregó soporte de muestreo a Traceview para Dalvik en el lanzamiento de KitKat.

Compatibilidad con más funciones de depuración

ART admite una serie de nuevas opciones de depuración, particularmente en la funcionalidad relacionada con el monitoreo y la recolección de elementos no utilizados. Por ejemplo, puedes:

  • Vea qué bloqueos se mantienen en los seguimientos de la pila, luego salte al subproceso que contiene un bloqueo.
  • Pregunte cuántas instancias en vivo hay de una clase dada, pida ver las instancias y vea qué referencias mantienen vivo un objeto.
  • Filtre eventos (como punto de interrupción) para una instancia específica.
  • Vea el valor devuelto por un método cuando sale (usando eventos de "salida del método").
  • Establezca un punto de observación de campo para suspender la ejecución de un programa cuando se accede y/o modifica un campo específico.

Detalles de diagnóstico mejorados en excepciones e informes de fallas

ART le brinda tanto contexto y detalle como sea posible cuando ocurren excepciones de tiempo de ejecución. ART proporciona detalles de excepción ampliados para java.lang.ClassCastException , java.lang.ClassNotFoundException y java.lang.NullPointerException . (Las versiones posteriores de Dalvik proporcionaron detalles de excepción ampliados para java.lang.ArrayIndexOutOfBoundsException y java.lang.ArrayStoreException , que ahora incluyen el tamaño de la matriz y el desplazamiento fuera de los límites, y ART también hace esto).

Por ejemplo, java.lang.NullPointerException ahora muestra información sobre lo que la aplicación intentaba hacer con el puntero nulo, como el campo en el que la aplicación intentaba escribir o el método al que intentaba llamar. Estos son algunos ejemplos típicos:

java.lang.NullPointerException: Attempt to write to field 'int
android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object
reference
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.

Informe de problemas

Si se encuentra con algún problema que no se deba a problemas de JNI de la aplicación, infórmelo a través del Rastreador de problemas del proyecto de código abierto de Android . Incluya un informe de adb bugreport y un enlace a la aplicación en la tienda Google Play, si está disponible. De lo contrario, si es posible, adjunte un APK que reproduzca el problema.