Tiempo de ejecución de Android 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 ejecutable Dalvik (DEX) 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 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 características principales implementadas por ART.

Compilación anticipada (AOT)

ART introduce 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 aplicaciones utilizando la herramienta dex2oat en el dispositivo. Esta utilidad acepta archivos DEX como entrada y genera una aplicación compilada ejecutable 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 pueden 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 resulta en una visualización entrecortada, una mala capacidad de respuesta de la interfaz de usuario y otros problemas. ART mejora la recolección de basura de varias maneras:

  • Diseño mayoritariamente concurrente con una única pausa de GC
  • Copia simultánea para reducir el uso y la fragmentación de la memoria en segundo plano
  • La duración de la pausa del GC es independiente del tamaño del montón.
  • Recolector con tiempo total de GC más bajo para el caso especial de limpieza de objetos de corta duración asignados recientemente
  • Se mejoró la ergonomía de la recolección de basura, lo que hace que las recolecciones simultáneas de basura sean más oportunas, lo que hace que los eventos GC_FOR_ALLOC sean 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.

Soporte para perfilador de muestreo

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 al método, y el uso de la herramienta afecta notablemente el rendimiento en tiempo de ejecución.

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

Soporte para más funciones de depuración

ART admite una serie de nuevas opciones de depuración, particularmente en funciones relacionadas con el monitoreo y la recolección de basura. Por ejemplo, puedes:

  • Vea qué bloqueos se mantienen en los seguimientos de la pila y luego salte al hilo que contiene un bloqueo.
  • Pregunte cuántas instancias activas hay de una clase determinada, solicite ver las instancias y vea qué referencias mantienen activa un objeto.
  • Filtrar eventos (como puntos de interrupción) para una instancia específica.
  • Vea el valor devuelto por un método cuando sale (usando eventos de “salida de método”).
  • Establezca un punto de vigilancia 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 fallos.

ART le brinda tanto contexto y detalles como sea posible cuando ocurren excepciones en tiempo de ejecución. ART proporciona detalles ampliados de excepciones 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 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. A continuación se muestran 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 fallas nativas de las aplicaciones, al incluir información de Java y de la pila nativa.

Informar problemas

Si tiene algún problema que no se debe 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 adb bugreport y un enlace a la aplicación en la tienda Google Play, si está disponible. En caso contrario, si es posible, adjunta un APK que reproduzca el problema.