Arquitectura Android y Dalvik

Una de las ramas de Java que se ha hecho un hueco importante en cuando a desarrollos es la plataforma Android de Google .Es obvio para todo el mundo que una gran parte del futuro de los desarrollos informáticos pasan por el mundo de los móviles y las tabletas en los cuales Android es el nuevo Windows .Ahora bien ¿ Que es Android exactamente y como funciona? . Vamos a intentar clarificar algunos conceptos en este artículo.

Java Virtual Machine

En primer lugar vamos a hablar de  Java y de la maquina virtual Java que se encarga de que nuestro código se ejecute en varias plataformas apoyándonos en la siguiente imagen.

En Java  nosotros partimos de un código fuente (.java) y lo compilamos con un compilador (javac) para convertirlo a código binario (.class) que la maquina virtual Java (JVM) es capaz de interpretar  y convertir en código nativo que el sistema operativo es capaz de interpretar.Ahora bien¿ funciona Android de la misma forma?

Android Virtual Machine (Dalvik)

En el caso de Android las cosas son similares pero no iguales .Android soporta una maquina virtual diferente denominada Dalvik . Android y Dalvik son los encargados de trabajar con el código fuente Java y convertirlo en código nativo para el kernel de linux que la plataforma Android soporta.

Como la imagen muestra Android añade un paso intermedio . En este paso todos los ficheros .class de Java son pasados por otro proceso adicional de optimización ya que recordemos estamos en una plataforma móvil y los recursos son limitados . En este proceso todos los ficheros .class son agrupados en un único fichero .dex (Dalvik Executable) .Para que nos hagamos una idea un fichero dex descomprimido ocupa la mitad que las mismas clases en formato jar (comprimido).

Dalvik y Multi JVM

Otra diferencia importante que existe entre las aplicaciones Java y las aplicaciones Java Android (Dalvik) es que por ejemplo en un servidor de aplicaciones (Jboss,WebSphere,WebLogic) todas las aplicaciones corren sobre la misma maquina virtual.

En Dalvik esto no es así ya que cada aplicación corre en su propia maquina virtual aislada con el aumento de recursos que esto supone pero también con el mayor aislamiento entre las distintas aplicaciones que se consigue.

Aunque disponemos de una maquina virtual por cada aplicación Android realiza una fuerte optimización y carga una maquina virtual inicial denominada Zygote que es la encargada de arrancar el resto .

Dalvik Memoria

Todas las maquinas virtuales comparten la memoria del terminal

Android y Java SDK.

Muchas veces la gente me comenta sobre Android  lo siguiente .Bueno ok a lo del fichero dex y el paso intermedio pero al final trabajamos como con Java normal no?? . Lamentablemente esta es una verdad a medias . El JDK de Java almacena sus clases principalmente en el fichero rt.jar . Este fichero contiene todas sus clases con todos los paquetes.

Lamentablemente en el Android SDK esto no es así  ya que Android no necesita tantas clases como el JDK standard para trabajar . De hecho hay Packages que sobran por completo (caso de Swing) . Concretamente en Android podremos dividir los packages del JDK de la siguiente forma.

  1. Packages implementados completamente (Verde)
  2. Packages implementados parcialmente (Azul)
  3. Packages no implementados (Rojo)

Con lo cual el gráfico quedaría de la siguiente forma

Como conclusión podemos decir que aunque Android esta básado en Java no son lo mismo y puede que nos encontremos con que hay algunas clases que queriamos usar que no estan disponibles del JDK.