Entendiendo el impacto de ART, la nueva máquina virtual de Android

Entendiendo el impacto de ART, la nueva máquina virtual de Android

Noticias y novedades

Entendiendo el impacto de ART, la nueva máquina virtual de Android

31 agosto, 2014 10:31

Desde hace tiempo hemos estado comentando sobre ART, la nueva máquina virtual que usará Android L (anteriormente explicamos cómo se puede activar ART en KitKat). En esta ocasión entraremos en mayor detalle sobre el impacto de ART y las consideraciones que deben tener tanto usuarios como desarrolladores. 

JIT vs. AOT

Como sabemos, las apps de Android se distribuyen en el formato .apk. Un apk contiene clases de Java compiladas en un formato de bytecode conocido como DEX. El formato DEX es independiente de arquitectura de procesador, por lo que para ser ejecutado necesita traducirse a “código máquina” nativo para el procesador de nuestro dispositivo.

La diferencia fundamental entre Dalvik y ART es cuándo hacen esta traducción o compilación. Dalvik utiliza lo que se llama compilación “justo a tiempo” (just-in-time, o JIT), mientras que ART utiliza compilación previa (ahead-of-time, o AOT). 

Con el compilador JIT de Dalvik, cada que iniciamos una app, la máquina virtual dinámicamente traduce una parte del bytecode DEX a código máquina. Conforme continúa la ejecución de la app, se compila más bytecode y se almacena en memoria cache. Es por ello que se dice que la app está siendo compilada “justo a tiempo” conforme la usamos. En el caso de ART, las apps se compilan desde que se instalan en el dispositivo, y ya se deja instalado el código máquina listo para ejecutarse y sin necesidad de mayor compilación.

Impacto para usuarios

En general, las aplicaciones tienen mejor desempeño con ART, ya que el procesador ya no tiene que dedicar recursos a estar compilando la app mientras ésta se usa. Esto también resultará en un menor consumo de energía.

Obviamente, estas mejoras tienen su costo. Por un lado, las apps tomarán mayor tiempo para instalarse (por lo que ya dijimos de que al instalar se está compilando la app completa para nuestro procesador específico). Pero no te preocupes, no creas que una app se tomará 30 minutos en instalar, típicamente será una cuestión de segundos o decenas de segundos a lo mucho. La otra consecuencia negativa es que las apps instaladas ocuparán más espacio de almacenamiento que antes (aproximadamente un 20% más).

En resumen: mejor desempeño y eficiencia de ejecución a costa de un mayor tiempo de instalación y espacio de almacenamiento. Creo que es un sacrificio que bien vale la pena.

Impacto para desarrolladores

La gran mayoría de las apps para Dalvik deben funcionar en ART sin problema. Sin embargo, hay algunas casos donde sí es mejor ajustar tu código para asegurar que tu app funcione bien en ART.

Una práctica relativamente común en Android apps hasta ahora es que en el código se incluyan llamadas explícitas al recolector de basura por medio de System.gc(). Típicamente esto se hace para evitar ocurrencias de GC_FOR_ALLOC (cuando el sistema se queda sin memoria y llama de manera forzada al recolector de basura en un momento que puede no ser el ideal). En ART, debido a las mejoras en el sistema de recolección de basura, ya no será necesario estar haciendo llamadas explícitas a System.gc(). 

Desde el código de tu app puedes detectar si se está ejecutando sobre Dalvik o ART, checando el valor de System.getProperty(“java.vm.version”). Si el valor es 2.0.0 o mayor, entonces la app se está ejecutando en ART.

ART es más estricto que Dalvik en la verificación de código. El código producido con el SDK de Android no debería tener problema, pero sí puede ser que herramientas terceras generen código que ART no acepte. Por ejemplo, esto podría ser el caso con herramientas para ofuscación de código. Los proveedores terceros están ajustando sus herramientas para asegurar que sean compatibles con ART así que la recomendación en ese sentido es actualizar tus herramientas a la versión más reciente.

Un aspecto positivo es que será más fácil rastrear errores de tipo NullPointerException, ya que ART dará información sobre cuál fue el método que el código intentó acceder.

Conclusión

ART sin duda traerá mejores a la plataforma Android. Para los usuarios, esto será transparente aunque es importante que conozcan qué es lo que está sucediendo “detrás del escenario”. Para los desarrolladores, en general ART promete hacer las cosas más sencillas y ayudar a los desarrolladores a que sus apps tengan mejor desempeño.

Para mayor referencia, te invito a visitar la Zona de desarrolladores Intel, donde encontrarás más recursos técnicos con información para el desarrollo de apps Android.

Referencias: