ART, la nueva maquina virtual de Google que sustituirá a Dalvik

David Sánchez el 6/11/2013 a las 21:27

android-logo_m

Hace no mucho tiempo, os hablamos de que Google había adquirido una empresa francesa llamada Flexycore. Esta compañía desarrolló una aplicación que hacía que nuestros terminales Android fueran más fluidos y, por tanto, fueran más rápidos. Pues bien, esta relación ya da sus frutos pues se ha sabido que en Android 4.4 Kit-Kat, Google implementa una nueva maquina virtual desarrollada por Flexycore que presumiblemente sustituirá a la actual. Vamos a explicarlo en profundidad.

En nuestros terminales, cada aplicación que abrimos se ejecuta en su propia maquina virtual, pero ¿qué es una maquina virtual?

Una maquina virtual es un programa dentro de un sistema operativo que simula ser su propio sistema operativo. Para que os hagáis una idea, en Windows, que quizá nos es más familiar. Cada vez que ejecutáramos un programa este abriría un Windows propio que se ejecutara en él. Suena absurdo, pero ahora pensad que queréis ejecutar un programa para Linux en Windows o la inversa, para ello tendríais que usar una maquina virtual. En Android, el sistema operativo base es Linux y la maquina virtual es conocida como Dalvik  que es quien compila los archivos Class de Java en archivos ODEX para ejecutarlos en el terminal.

fig02

Como casi todo, este sistema tienes sus ventajas en inconvenientes. El sistema de nuestros Android nos permite cambiar de maquina virtual manteniendo otra o otras en segundo plano. Una gran ventaja que dota a nuestros dispositivos de una multitarea prácticamente real. Sin embargo, que cada aplicación se tenga que desarrollar en su propia maquina virtual en lugar de ejecutarse directamente desde el sistema operativo produce que el conjunto de el sistema pierda fluidez, y esto empeora conforme más aplicaciones tenemos abiertas ya sea en pantalla o en segundo plano.

A pesar de este inconveniente, Android es un sistema notablemente fluido, pero cabe preguntarse si puede serlo más aún. Para Google, la respuesta es sí. Por eso motivo ha decidido crear una nueva maquina virtual nueva llamada ART (Android Runtime) que en un futuro sustituirá a la actual, Dalvik. Esta nueva maquina virtual pretende hacer funcionar todo el sistema más rápidamente. Para ello trabajará con un nuevo tipo de archivo compilado llamado OAT (como hemos dicho, hasta ahora eran archivos ODEX). Por supuesto, Google ha facilitado el codigo para poder pasar de una compilación a otra si lo deseamos. Lo podéis encontrar aquí.

La principal diferencia entre la antigua Dalvik y la nueva ART, reside en que la antigua ejecuta una maquina virtual interpretando el código al tiempo que se inicia la aplicación. En cambio, ART es AOT (Ahead-Of-Time), es decir, comienza una pre-compilación al instalar la aplicación y, por tanto, al ejecutarla esta ya no requiere tanta carga de datos como antes y hace que iniciar una aplicación se produzca en menos tiempo. Además, las primeras pruebas realizadas por desarrolladores con la nueva ART están siendo muy alentadoras, ya que en algunos caso se reduce el tiempo de inicio y ejecución de una aplicación a la mitad.

Por supuesto, esto también afecta al tiempo de cierre de una aplicación. Esta será consecuentemente más rápida, y al mismo tiempo liberará el sistema del uso intenso durante largos periodos, lo cual, significa que el procesador trabajará menos y por tanto se ahorra batería a largo plazo. Todo muy buenas noticias y, realmente, esta nueva implementación parece sencillamente fantástica.

Pero además de todo esto, puede haber otro motivo sobre este posible cambio de Dalvik a ART. Google ha tenido disputas legales con Oracle, que compró a Sun  Microsystems, quien creo el lenguaje de programación Java que se usa para crear las aplicaciones en Android.

Desde Oracle, aseguran que Dalvik ha sido creada por un equipo de Google y que está desarrollado a partir de este lenguaje de programación como un código de licencia abierta que se sirve de Java como aseguran los de Muntain View. Para librarse de otros juicios similares, y de suspicacias y dependencias, Google puede querer implementar la nueva maquina virtual cuyo lenguaje de programación es C++.

A pesar de todas estas ventajas, ART, también tiene inconvenientes. Primero, que al incorporar una parte de la compilación en la instalación de una app, el tiempo para instalarla se verá aumentado. Y segundo, que ya que se añade cierto código durante la instalación, las aplicaciones ocuparán algo más (muy, muy poco más), sin embargo, cuantas más aplicaciones instaladas, mayor será esta carga de espacio.

dalvik-art

Por otro lado, si sois los afortunados poseedores de un Nexus 5 (o muy pronto cualquier otro terminal con Android 4.4 Kit-Kat) podréis cambiar entre ellas y ayudar al equipo de Android encontrando fallos en ART antes de que se implemente definitivamente y así, comprobar desde ya si realmente nuestros teléfonos pueden ser más fluidos con la nueva maquina virtual. Para ello, pulsad varias veces sobre Número de Compilación en Información del Teléfono/Tablet dentro de los Ajustes y desbloquead las Opciones de Desarrollo que también se encontrarán dentro de los Ajustes. Ahí encontraréis la opción para cambiar de Dalvik (que viene marcado por defecto) a ART. Hacedlo bajo vuestra responsabilidad ya que esto pude provocar fallos inesperados y que el sistema vaya lento.

Sin embargo, y a pesar de que parece que son muy buenas noticias, Google no ha informado demasiado sobre este importante cambio. Puede ser, que esto sea debido a que el cambio de una a otra maquina virtual no sea definitivo por el momento. O esperaba a que los desarrolladores lo encontrarán para escuchar sus quejas, sugerencias o mejoras para aplicarlas. Quizá pretende que sean primero estos mismos desarrolladores los que hicieran un testeo previo antes de empezar con un beta-testeo en toda regla en toda la comunidad Android.

Por tanto, es muy posible que la nueva maquina virtual se implementará en alguna de las siguientes versiones de Android y sustituirá a Dalvik, mejorando la fluidez y acercando poco a poco las más recientes versiones de Android a cualquier terminal ya sea de gama baja, media o alta.

Atención: De momento no intentéis esto con Roms Kit-Kat cocinadas ya que podrían provocar fallos graves en vuestros terminales.

Más información de Art en Android Source Code

Te puede interesar
  • Tobio

    Muy buen articulo. Estaba deseando que lo sacaseis para enterarme de mas cosillas sobre ART.

    Espermos que este sea un punto de inflexion para android y que se haga notoria una mayor fluidez en futuras versiones del OS.

    • Segundo movimiento: lo de fuera

      Llevo esperando por este artículo desde el día 1 de Noviembre, buen trabajo EAL!!!

    • Varto

      seria lo mejor que podrian hacer y hacer mas si cabe fluido el SO, sobretodo que se mantenga con el paso del tiempo. bravoo GOOGLE

  • Erik Berdonces Bonelo

    Yo creo que esto es una gran noticia, aunque, claro, ahora la duda es: “Que pasa con las aplicaciones basadas en Java?” Funcionaran también con Art? O se tendran que renovar? Porque tendremos mezcla entre C++ y las viejas aplicaciones.

    Y otra cosa (no se si es cosa mia) pero ART no se parece mucho a DART, el nombre del lenguaje de programación creado por google? (esto ya creo que es una inventada pero nose, nunca hay que descartar…)

    • Jay

      Con el NDK las aplicaciones ya se compilan en lenguaje nativo C o C++, seria muy ilogico que saquen una maquina virtual para convertir de C a C o de C++ a C++, si quieren programar a bajo nivel que usen el NDK.

    • Gonzalo

      Lo de que cambien de Java a C++ no se lo cree nadie. Google ni siquiera da soporte para ese lenguaje en la mayoría de sus APIs (no digo en Android, sino todas las APIs que tiene). No tendría ningún sentido comercial y me gustaría de que fuentes saca EAL eso.

      Un cambio a otro lenguaje más moderno podría ser factible (ya sea DART, Go, Python o algo así) aunque no creo que ocurra. Ya existe una gran comunidad de programadores Android que usan Java, hay millones de librerías y tutoriales, por lo que no tiene sentido cambiar el lenguaje en el que se programa.

      Puede cambiarse fácilmente el bytecode interpretado sin tener que cambiarse el lenguaje que usan los programadores. Y seguramente es eso lo que harán.

    • Sergio

      El java como lenguaje no cambiaría en absoluto!

      Lo que cambia es el compilado en tiempo real a bytecode de java, que es una especie de intermedio entre el java y el código máquina que geenra un código en C++.

      Ese “medio compilado” es el que recibe Dalvik y lo ejecuta en tu hardware concreto. Ahora quieren “medio compilar” el Java de siempre en “otra cosa”, que puede ser un formato más cercano al código máquina (y por tanto más rápido de correr) o directamente código máquina como un programa hecho en NDK.

      Es como si se convirtiese de Java a C++ al instalar la aplicación y ese C++ se compilase a un EXE (para entendernos) antes de ejecutarse. La conversión tarda un poco y ocupa algo, pero una vez hecha una vez, la app esta lista para correr en tu hardware a máxima velocidad.

  • jemjem

    A mi lo que me gustaría saber es lo siguiente. Hasta ahora, cuando tenías una ROM “cocinada” de vez en cuando dicen que es bueno entrar al menú recovery y borrar los datos de cache y los datos de caché de Dalvik. ¿Ahora también habrá que hacerlo con ART? o ¿es un sistema diferente que no deja tanta basura en la caché?

  • Akshak

    Art pinta muy bien para reemplazar a Dalvik, yo ya me estaba ilusionando de poder acelerar mi smartphone hasta que me acorde que poseo un Galaxy S3 o como nos pasara a la mayoría, no importa que las siguientes versiones de Android corrieran hasta en 256 de Ram no tendremos soporte, ya ni los Nexus se salvan de la falta de soporte aunque tengan Hardware para correr las actualizaciones de aquí a 5 años, habrá que esperar a que lancen una versión definitiva de Art y comprar nuevo móvil, al menos así me aseguro que si lo tendre

    • IvanD3

      Como envidio a los que tenéis dinero suficiente para cambiar de teléfono en lugar de pasarle una custom

    • Venomcmar

      Pasese a CyanogenMod y debe de sufrir. Éso hice yo y mi S3 va volando desde entonces.

  • Jorge

    Amigos, disculpen mi ignorancia pero pueden explicarme porqué Google mejor no elimina la máquina virtual de Android y que las aplicaciones se ejecuten sobre el puro sistema? No sería así Android más fluido a que tenga que ejecutar aplicaciones con runtime?

    • VoicesX

      Al correr directamente sobre el sistema pierdes performance y estabilidad, ya que es mas simple controlar el uso de recursos en las maquinas virtuales que directamente en el sistema. El ejemplo mas simple es que si en Android se pega una aplicación por un problema de programación, solo afecta a esa aplicación; pero si estuviese sobre el sistema base, podría dejar colgado completamente el teléfono. Hay mas cosas que permiten hacer las maquinas virtuales, como suspenden la aplicación cuando no esta en uso, restringir permisos a hardware, seguridad, etc…

      • Jorge

        Muchas gracias, ahora lo entiendo mucho mejor! :)

      • Segundo movimiento: lo de fuera

        Y se te olvido el mayor detalle… gracias a que es en Java, no hay compilar el código una para ARMv6, otra para ARMv7, otra para ARMv8, otra para x86, etc… sino que puede correr en cualquier arquitectura

        Además que estén en máquinas virtuales permite que funcione ese botón tan útil llamado compartir, que hace que puedas pasar datos entre aplicaciones, eso en iOS y WP es imposible

        • Joaquin

          Desde hace como 1 década no existe compilador alguno que no soporte C++ ( por lo tanto también C).
          Aparte todos los lenguajes de programación que no sean C y C++, tiene sus librerias creadas en éstos lenguajes y en assembler.
          Acordate que tanto C,C++ como Assembler son los lenguajes más profundos en cuanto a nivel que existen, por lo tanto sirven como lenguajes madres a los demás.

      • rubén

        hola, pues ya que andamos de ignorantes en el tema quisiera saber si wp o ios usan tambien maquinas virtuales… pensaba en mi ignorancia que android la usaba para que funcionara en muchos terminales de diferentes marcas( no me pregunten porque xD)

        • Segundo movimiento: lo de fuera

          No, WP e iOS ejecutan código nativo (binarios precompilados)

          No exactamente lo de diferentes marcas.

          Supongamos que yo hablo en asturiano con un japonés

          Ni él me va a entender ni jota ni yo a él, sin embargo imaginate que cada uno de nosotros llevamos a una persona que a tiempo real le pasa una tradución perfectamente entendible, pues esa es la función de la máquina virtual java

          Solo que en vez de idiomas, arquitecturas de PC

          • rubén

            Hombre muchas gracias por la respuesta, pues esperemos que ART sea mejor que dalvik entonces

      • Xerox

        Eso esta bastante lejos de la realidad, no debemos confundir un nivel de VM como java/dalvik con una virtualizacion estricta del SO , Dalvik usa un userID para cada aplicacion, es cierto, pero para eso debe usar herramientas del SO en la que corre ,, es decir linux con cgroups, por ejemplo, pero midiendo “perfomance” la misma aplicacion corriendo en un container de linux directamente es mucho mas rapida y segura que corriendo a través de cualquier VM ya sea a nivel de SO tipo vmware o libvirt, o a traves e VM iterpretadas como java/Dalvik

  • Sergio

    No estaría mal que citarais a Android Police como fuente después de calcarles como poco la mitad del artículo. Son de agradecer vuestras traducciones y vuestras aportaciones, pero no citar una fuente tan clara (y de la que sacáis tantos artículos) es un error…

  • Fernando

    Yo lo he probado y las sensaciones fueron buenas, la unica pega es que el whatsapp no funciona con ART :(

    • Deuxieme Fois

      Solo debes desinstalar e instalar nuevamente.

      • Igor Wilkomirsky

        acabo de cambiar de Dalvik a ART y no tuve ningún problema con whatsapp. (debe ser por las nuevas versiones, veo que han pasado 7 meses desde la publicación de este artículo). Corre increíble :)

  • asdfencio

    Creo que a la mayoría de los usuarios les importa un bledo que tarde un poco más en instalarse una app, lo importante es que tan fluida ande… me parece una excelente noticia ART.

    • Igor Wilkomirsky

      Llevo 20 minutos probandolo en mi moto X. Se nota el cambio de forma muy sutil, pero se nota.

  • rafanate

    Yo apuesto por una mejor optimización en Android, pero de momento ART no significa un cambio drástico, quizás le falta pulirse más y por eso lo publicaron en kitkat aprovenchando el feedback de los desarrolladores. En particular he realizado tests sintéticos de Dalvik vs ART en la ROM AOSP para el Nexus 4 y Dalvik arroja mejores resultados, sin decir que las aplicaciones generan una taza de error mucho mayor con ART

    • Dangelo Medina

      Hombre, en este articulo y en la primera pagina que lo lei, que fue Androidpolice.com mencionan seriamente que no se intente probar ART en Roms KITKAT “no oficiales” (cocinadas) Es decir por ahora SOLO NEXUS 5. Porque no funciona correctamente y en algunos casos causa problema a nivel de software. ART representa un cambio sustancial aun estando en prueba, solo que no es compatible aun 100% con las Apps que tenemos hoy por hoy en Android.

      • luiis martinez

        Exacto no es conveniente usar ART en roms cocinadas ya que podia ocasionarte problemas con el software. A demas de ser una maquina virtual nueva es beta en lo cual hacer una comparacion con Dalvik no es justo…pero espero que flexycore logre hacer de ART una maravilla

        • rafanate

          En cuanto a las pruebas, pues son solo eso, experimentación, nada nos limita a experimentar con las opciones que nos ofrecen sea Beta o incluso Alpha si existiese, en Roms cocinadas u oficiales, el caracter de AOSP se acerca más a ‘rom pura’ no a rom cocinada.

          Sin embargo creo que tanto ustedes como yo que apostamos por Android queremos ver una mejora sustancial con un cambio tan importante como representa la maquina virtual de android, que ya bastante se ha explicado su vital función en el rendimiento del sistema.

          Discrepo contigo en el hecho de no compararla con Dalvik, pues a día de hoy es nuestra única referencia, entonces pregunto con cual entonces debemos compararla? El mismo sistema operativo reinterpreta y traduce los archivos odex al nuevo formato de ART, entonces es lo mas transparente posible, por lo tanto deberia darnos resultados significativos en cuanto al rendimiento, si es eso lo que buscan, algunas aplicaciones fallan es cierto, pero las que no deberian funcionar bastante mejor y no lo hacen aun, solo aun, quizas en el futuro sea la pega de Android y en su momento lo aplaudiré.

          No se si irrumpe con las politicas del foro pero dejo la imagen de uno de los test. http://rafanate.mooo.com/links/Dalvik_vs_ART_Antutu_X_Bench.jpg

          PD. Espero que ART sea lo que todos esperamos…

  • Homorrank

    Entonces las apps dejaran de ser en java? Y serán en c++ no?

  • stronger1101

    Buen dIa un saludo desde Colombia.

    Tengo un duda perdón si pecó por mi ignorancia.

    Si cambiamos de máquina virtual y para ello necesitamos posiblidad lenguaje de programación no existe la posibilidad de que nuestro amado sistema deje de ser de código abierto. Es decir con no es posible que dejen de usaré el kernel se linux y se converta en algo que se ppueda cobrar.

    Agradezco a quien me pueda explicar un poco.

    • Gonzalo

      No tiene nada que ver. Pero nada. Android es abierto por dos razones: Porque el kernel de Linux tiene licencia GNU y porque a Google le interesa. La máquina virtual dalvik es otra cosa totalmente distinta

  • stronger1101

    Perdón corrijo el principio no pude editar.

    Si cambiamos la máquina pero para ello necesito cambiar el lenguaje de programación no es posible que también se deje de usar el kernel de Linux? El resto de la pregunta está bn.

    • Igor Wilkomirsky

      dejar de usar el kernel linux? Y para qué dejar de usar un kernel que esta ultramega probado por la comunidad y actualizandose mas de 10 veces mas rápido que otros? no le veo mucho sentido.

  • Marc

    ” A pesar de este inconveniente, Android es un sistema notablemente fluido ”

    Si claro, con 4/8 núcleos y 2 Gb de memoria ram como mínimo. Esperemos que para 2015 no se necesite el doble de potencia para hacer de Android un sistema fluido en comparación con sus competidores, que con la mitad de especificaciones ya van sobrados!

    • Segundo movimiento: lo de fuera

      Tu eres tonto, un Galaxy Nexus de 2 nucleos a 1,2 y 1 GB de RAM ya va muy fluido

      • Yo

        No creo que haga falta insultar a nadie ni llamarlo tonto por expresar una opinión.

      • Marc

        Tu concepto de un SO fluido es un poco diferente al mio.

        Saludos.

    • dangelo

      De que sirve que la competencia necesite la mitad de la especificaciones que necesita Android, si teniendo “la mitad” el precio final es igual de caro? Importa un bledo si necesita 20 núcleos Android y 1 iOS, igual comprarte un iPhone 5s con 600$ de salida y cuando salio un Galaxy S4 tambien 600$…
      Da igual que le pongan lo que le quieran poner… lo que importa es el resultado final, y si con los 8mil nucleos funciona mejor pues que se los metan y ya.
      Saludos.

    • SASHA

      Mmmm…me parece que estas mezclando las aguas no confundas marcas k se benefician de android para llenarse los bolsillos con GOOGLE y sus productos el verdadero android phone es la línea nexus no es Samsung ni sony ni lg ni htc no confundas…el ultimo equipo lanzado y diseñado por completo por google en un 100% es el moto X y con un dual core s4 pro y 2gb de ram le pasa el trapo a muchos con hardware muy superior.Los mismos programadores de google lo dijeron android no necesita un óctuple core para ser eficiente,ahora con la salida de kitkat MENOS con soporte a futuro para equipos con 512 de ram….que obviamente las marcas no lo van a implementar …si no como Samsung te va vender el el ultimo modelo con 14 nucleos …..la diferencia radica en QUE ES NEGOCIO Y QUE ES REAL…piensenlo saludos.

  • Alberto

    Estas cosas son las que hacen falta, mejoras que permitan una experiencia de usuario más completa porque… no nos vamos a engañar… tenemos unos bichos muy potentes en nuestras manos pero con un sistema que puede mejorar mucho en fluidez

  • Josep

    Máquina.

  • Jesús

    Me parece marear mucho la perdiz para explicar algo que en el fondo es mucho más simple. Simplemente se ha cambiado una máquina virtual por otra, que es más eficiente porque, primero, es más moderna (Dalvik tiene sus añitos ya) y, segundo, porque compila en tiempo de instalación y no de ejecución, por lo que puede “recrearse” más optimizando el código.

  • aaaaa

    ” Android es un sistema notablemente fluido”

    JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    • Rodrigo Coronado

      Tan fluido que tarda hasta 5 segundos en abrir un mensaje.

    • Sephiroth

      sistema fluido…?? jajaja

  • tOmAs

    Probe el ART en un MOTO G corriendo Paranoid Android 4.4.2 (ya se que dijieron lo de las ROMS modificadas pero es un telefono que compre para probar ROMs kernels y todo lo demas para despues ver de usarlas en un MOTO X que tengo) note que tarde una eternidad en iniciar pero despues hice una benchmark y marco como 17000 cuando normalmente me daba 15000 y noto que anda mas rapido en la apertura de aplicacion

LG Nexus 5X - Smartphone libre de 5.2" (2 GB de RAM, 16 GB de memoria interna, Android) color blanco
Precio oferta
245,00 €