Tiempo de ejecución de Android y Dalvik

El tiempo de ejecución de Android (ART) es el entorno de ejecución administrado que usan las apps y algunos sistemas en Android. ART y su predecesor, Dalvik, se crearon originalmente. específicamente para el proyecto de Android. ART como tiempo de ejecución ejecuta Dalvik ejecutable (DEX) y la especificación del código de bytes DEX.

ART y Dalvik son entornos de ejecución compatibles que ejecutan el código de bytes DEX, por lo que las apps desarrollados para Dalvik debería funcionar cuando se ejecute con ART. Sin embargo, algunos Las técnicas que funcionan en Dalvik no funcionan en ART. Para obtener información sobre el sobre problemas más importantes, consulta Verificación el comportamiento de la app en el entorno de ejecución de Android (ART)

Funciones de ART

Estas son algunas de las funciones principales que implementa ART.

compilación por adelantado (AOT);

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

En el momento de la instalación, ART compila apps usando la versión dex2oat. Esta utilidad acepta archivos DEX como entrada y genera una app compilada ejecutable para el dispositivo de destino La utilidad debería poder compilar todos los archivos DEX válidos sin dificultad. Sin embargo, algunos casos de uso Las herramientas producen archivos no válidos que Dalvik puede tolerar, pero no se pueden compilada por ART. Para obtener más información, consulta Asignación de direcciones Problemas de Recolección de elementos no utilizados.

Recolección de elementos no utilizados mejorada

La recolección de elementos no utilizados (GC) consume muchos recursos y puede afectar el rendimiento de una app lo que causa una pantalla entrecortada, una mala respuesta de la IU y otros problemas. El ART mejora los elementos no utilizados de datos de varias maneras:

  • Diseño mayormente simultáneo con una sola pausa de GC
  • Copias simultáneas para reducir el uso y la fragmentación de la memoria en segundo plano
  • La duración de la pausa de la GC es independiente del tamaño del montón
  • Colector con menos tiempo total de recolección de elementos no utilizados para el caso especial de limpieza objetos de corta duración y asignados recientemente
  • Ergonomía mejorada en la recolección de elementos no utilizados, lo que genera desperdicio simultáneo las colecciones sean más oportunas, lo que hace que GC_FOR_ALLOC extremadamente raros en casos de uso típicos

Mejoras en el desarrollo y la depuración

ART ofrece varias funciones para mejorar el desarrollo y la depuración de apps.

Compatibilidad con el generador de perfiles de muestreo

Históricamente, los desarrolladores han usado Traceview. (diseñada para registrar ejecución de la app) como generador de perfiles. Aunque Traceview brinda información útil, sus resultados en Dalvik se han sesgado por la sobrecarga de llamada por método, y usa de la herramienta afecta notoriamente el rendimiento del tiempo de ejecución.

ART agrega compatibilidad con un generador de perfiles de muestreo dedicado que no tenga estos las limitaciones de seguridad. Esto brinda una vista más precisa de la ejecución de la app sin una demora significativa. Se agregó compatibilidad con el muestreo en Traceview para Dalvik en la versión de KitKat.

Compatibilidad con más funciones de depuración

ART admite varias opciones de depuración nuevas, particularmente en aplicaciones de supervisión y relacionada con la recolección de elementos no utilizados. Por ejemplo, puedes hacer lo siguiente:

  • Consulta qué bloqueos se mantienen en los seguimientos de pila y, luego, ve al subproceso que contiene un candado.
  • Preguntar cuántas instancias en vivo hay de una clase determinada, preguntar para ver y ver qué referencias mantienen activo un objeto.
  • Filtra eventos (como el punto de interrupción) para una instancia específica.
  • Para consultar el valor que muestra un método cuando sale (mediante “method-exit” eventos).
  • Establece un punto de análisis de campo para suspender la ejecución de un programa cuando un y/o modificar este campo.

Mejora en los detalles de diagnóstico en las excepciones y los informes de fallas

ART te brinda la mayor cantidad de contexto y detalles posibles cuando se hacen excepciones en el tiempo de ejecución. de que ocurran cambios. ART proporciona detalles expandidos de excepciones para java.lang.ClassCastException, java.lang.ClassNotFoundException, y java.lang.NullPointerException. (Las versiones posteriores de Dalvik proporcionaron detalles de excepción expandidas para java.lang.ArrayIndexOutOfBoundsException). y java.lang.ArrayStoreException, que ahora incluyen el tamaño del array y el desplazamiento fuera de los límites, y el ART también lo hace).

Por ejemplo, java.lang.NullPointerException. Ahora muestra información sobre lo que la app intentaba hacer con el puntero nulo. como el campo en el que la aplicación intentaba escribir o el método al que intentaba escribir llamada. 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 brinda información de contexto mejorada en los informes de fallas por errores en código nativo de las apps incluyendo información de Java y de la pila nativa.

Cómo informar problemas

Si tienes algún problema que no se deba a problemas de JNI de la app, infórmalo a través del entorno abierto de Android Herramienta de seguimiento de errores del proyecto. Incluye un adb bugreport y vincula a la aplicación en Google Play Store, si está disponible. De lo contrario, si es posible, adjunta un APK que reproduce el problema.