Skip to content

ART: nueva máquina virtual de Android

En esta publicación describiremos las principales mejoras que proporciona la nueva máquina virtual ART (Android Runtime) comentando brevemente algunas de las características más destacadas comparándola con su predecesor Dalvik.

Como punto de partida para desarrollar este apartado, es imprescindible recordar cual es la funcionalidad de una máquina virtual en el desarrollo de aplicaciones para dispositivos Android. Como descripción genérica, podemos utilizar la siguiente definición:

Máquina Virtual: software encargado de simular las características de una determinada computadora, que permite la ejecución de programas como si tratase de una máquina real.

Desde el punto de vista más cercano a los dispositivos Android, este implementa un sistema operativo basado en Linux, y cuya máquina virtual (hasta ahora Dalvik) permite compilar los archivos de Java, convirtiéndolos en archivos ODEX, que permiten ahorrar espacio, además de estar optimizados para su ejecución en el dispositivo. Como parte de las características multitarea que proporciona un smartphone, es decir, la ejecución de varias máquinas virtuales, manteniendo varias de ellas en segundo plano, suele conllevar una falta de fluidez en comparación a su ejecución directa en un sistema operativo, y por lo tanto empeora la experiencia del usuario con el dispositivo.

Como solución a este problema, Google decidió desde la versión KitKat 4.4 (de manera experimental) ir introduciendo la nueva máquina virtual ART, cuyo lenguaje de programación es C++, y que es posible probar desde «Opciones para desarrolladores» en los ajustes del dispositivo (smartphones con Android KitKat).

En cualquier caso,  desde la propia documentación oficial de Google, se recomienda mantener Dalvik como máquina virtual , ya que puede ocasionar problemas con aplicaciones de terceros e incluso con implementaciones de Android. Además, indican que aunque cualquier aplicación debe funcionar sin problemas con la nueva máquina virtual ART sin realizar ningún tipo de cambio previo, se deberá prestar especial atención a determinar técnicas que son funcionales en Dalvik, pero que pueden ocasionar problemas con ART:

  • Uso de Java Native Interface (JNI) para la ejecución de código C/C++ en nuestra aplicación.
  • Uso de herramientas de desarrollo que generan código no estándar (como por ejemplo la ofuscación de código para ocultar su funcionalidad).
  • Uso de técnicas incompatibles para la compactación (establecer de manera consecutiva los espacios de memoria libres) del recolector de basura, como por ejemplo el uso de punteros.

En la siguiente publicación de esta serie profundizaremos en las recomendaciones que se deberán controlar para un funcionamiento correcto de una aplicación en la nueva máquina virtual ART.

Principales mejoras de la máquina virtual ART

Una vez expuestos algunos de los motivos que han llevado a Google a sustituir Dalvik en beneficio de ART, es necesario describir las principales características o ventajas de la nueva máquina virtual de Android, que podrían simplificarse en las siguientes:

Compilación Ahead-of-time (AOT)

Podríamos traducirla literalmente por ‘compilación por adelantado’ o pre-compilación. Es una de las principales diferencias con Dalvik, ya que este ejecuta una máquina virtual que interpreta el código a la vez que se ejecuta la aplicación (archivos ODEX mediante el sistema de compilación JIT o lo que es lo mismo «Justo a tiempo«).

En cambio, ART realizará una pre-compilación durante el proceso de instalación de la aplicación (nuevo tipo de archivo compilado ELF), mediante el uso de la herramienta dex2oat (utilidad que permite compilar archivos de entrada DEX, generando un ejecutable de la aplicación para el dispositivo). Esta primera compilación permite realizar cierta carga de datos, para que las tareas de inicio o cierre de la aplicación se realicen de manera más rápida, y por lo tanto se disminuyan los tiempos de uso de CPU, aumentando el rendimiento de la batería.

Mejoras en el recolector de basura

Estas mejoras permiten evitar problemas de rendimiento que suelen acarrear, entre otras cosas, mala respuesta por parte de la interfaz de usuario, y que en gran medida, se solucionan a partir de las siguientes acciones:

  • Menor tiempo de pausa en el recolector para objetos creados recientemente.
  • Procesamiento paralelo durante la pausa del recolector de basura.
  • Disminuir de dos a uno el número de pausas que realiza el recolector de basura, durante el tiempo que tarde en completar la tarea.
  • Mejora de la recolección de basura concurrente, que elimina procesos que ya no están en uso minimizando el consumo de recursos de la CPU. Además no será necesario llamar de manera explícita al recolector de basura por medio de System.gc(), cuando el dispositivo no disponga de memoria y una aplicación requiere más recursos (tipo de concurrencia GC_FOR_ALLOC).

Mejoras en el desarrollo y depuración de aplicaciones

  • Soporte para nuevas características de depuración: ART implementa una serie de opciones, que permitirán desde saber el número de instancias de una clase, pasando por el filtrado de eventos de esta, o conocer el valor devuelto por un método mediante el evento «method-exit».
  • Mejora del diagnóstico de los fallos y excepciones: ART proporciona mayor información de las excepciones que se produzcan en tiempo de ejecución, informando en mayor detalle de las siguientes: java.lang.ClassCastException, java.lang.ClassNotFoundException y java.lang.NullPointerException.
  • Soporte para perfiles en la vista de trazas, que a diferencia de su uso en Dalvik, ART no ha limitado su sobrecarga por problemas de rendimiento en tiempo de ejecución.

 

Comparativas Art vs Dalvik

En las siguientes imágenes se podrán visualizar diferentes comparativas entre ART y Dalvik:

Comparativa arquitecturas ART y Dalvik

Comparativa de las arquitecturas de las máquinas virtuales ART y Dalvik (imagen de Wikipedia, licencia CCO)

Comparativa Rendimiento ART Dalvik

Comparativa de rendimiento entre ART y Dalvik (imagen de Androidpolice.com)

Pinchando esta imagen, Bench-performance accederás a un artículo de Anandtech.com donde realizan una comparativa de ambas máquinas virtuales y comrpueban que ART mejora considerablemente la lectura de código. Además se muestra la comparativa con la carga de varias aplicaciones como ejemplo, mejorando ART claramente el rendimiento frente a Dalvik.

Volver arriba
Esta web usa cookies para su correcto funcionamiento. No hay cookies de publicidad, aunque algunos de los contenidos mostrados (videos o documentos insertados) están alojados en servicios externos (Youtube, Vimeo, Box...) que sí pueden implementar sus propias cookies. También se ha incluido en pruebas un Agente AI que incluye sus propias cookies   
Privacidad