Google 致力于为黑人社区推动种族平等。查看具体举措
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Android Runtime (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 de Android. ART como tiempo de ejecución ejecuta el formato ejecutable Dalvik y la especificación del 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 ART

Estas son algunas de las principales características implementadas por ART.

Recopilació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 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 pueden ser tolerados por Dalvik pero que ART no pueden compilar. Para obtener más información, consulte Cómo solucionar problemas de recolección de basura .

Recolección de basura mejorada

La recolección de basura (GC) puede afectar el rendimiento de una aplicación, lo que da como resultado una visualización entrecortada, una respuesta deficiente de la interfaz de usuario y otros problemas. ART mejora la recolección de basura de varias maneras:

  • Una pausa de GC en lugar de dos
  • Procesamiento paralelo durante la pausa de GC restante
  • Colector con menor tiempo total de GC para el caso especial de limpiar objetos de corta duración asignados recientemente
  • Ergonomía mejorada de recolección de basura, lo que hace que las recolecciones de basura concurrentes sean más oportunas, lo que hace que los eventos GC_FOR_ALLOC sean extremadamente raros en casos de uso típicos
  • Compactación de GC para reducir el uso y la fragmentación de la memoria en segundo plano

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 perfilador. 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 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 desaceleración significativa. Se agregó soporte de muestreo a Traceview para Dalvik en la versión de KitKat.

Soporte para 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 basura. Por ejemplo, puede:

  • Vea qué bloqueos se mantienen en los seguimientos de pila, luego salte al hilo que contiene un bloqueo.
  • Pregunte cuántas instancias en vivo hay de una clase determinada, pida ver las instancias y vea qué referencias mantienen vivo un objeto.
  • Filtra eventos (como punto de interrupción) para una instancia específica.
  • Vea el valor devuelto por un método cuando sale (usando eventos “method-exit”).
  • Establecer 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 la mayor cantidad de contexto y detalle posible cuando ocurren excepciones en 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 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 también lo hace).

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 fallos nativos de la aplicación, al incluir información de pila nativa y Java.

Informar problemas

Si tiene 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 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.