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.

001

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.

002

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.

003

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.

004

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 .

005

Dalvik Memoria

Todas las maquinas virtuales comparten la memoria del terminal

006

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.

007

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

008

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.

It's only fair to share...Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

About Cecilio Álvarez Caules

Cecilio Álvarez Caules Sun Certified Enterprise Architech (J2EE/JEE).

17 Responses to Arquitectura Android y Dalvik

  1. Sergio Marcilla 17 Diciembre, 2013 at 12:36 #

    Muchas gracias Cecilio,

    Una gran introducción de como funciona Android y Java dentro de el. Me gusta mucho como explicas los conceptos. Me encantaría que pudieramos colaborar de algún modo en el futuro.

    Un saludo

    • Cecilio Álvarez Caules 17 Diciembre, 2013 at 13:30 #

      Muchas gracias sergio .Ahora ando liado aprendiendo a manejar el blog , twiter etc . Pero no descarto nada a futuro ademas tu llevas otro blog de programación .¿Que tal te va con él?

      Un saludo

      • Sergio Marcilla 19 Diciembre, 2013 at 13:50 #

        Hola Cecilio,

        La verdad es que no puedo dedicarle todo el tiempo que quisiera. Intento ir metiendo la cabeza en la formación ya que me gusta mucho transmitir conocimiento y ayudar a otros que empiezan.

        En un futuro próximo me gustaría dar un vistazo a las excepciones, pienso que los errores ayudan mucho a aprender cuando uno tiene la actitud adecuada.

        Mi sueño!!!, escribir libros que combinen la programación con la psicología, el aprendizaje y las emociones.

        • Cecilio Álvarez Caules 19 Diciembre, 2013 at 22:00 #

          Llevar un blog yo me he dado cuenta que lleva tiempo y hay que tomarselo con filosofía 🙂

  2. Gabriel Pozo 20 Diciembre, 2013 at 15:12 #

    Me gusta mucho leer sobre el funcionamiento interno de Android, pero es raro encontrar texto en español sobre el mismo. Así que me alegra leer esto 😉

    Me gusto el post 😉 gracias por el trabajo 😀

    • Cecilio Álvarez Caules 20 Diciembre, 2013 at 18:30 #

      gracias 🙂

  3. Ángel Cervera 22 Diciembre, 2013 at 9:15 #

    Un pequeña corrección, “en los servidores de aplicaciones, NO todas las aplicaciones tienen porqué correr sobre la misma máquina virtual”. De hecho, no es lo habitual.

    • Cecilio Álvarez Caules 22 Diciembre, 2013 at 10:25 #

      Es cierto no tiene porque si hay una sola instancia si . Pero evidentemente no es obligatorio . Buena puntualización

  4. Raul 24 Diciembre, 2013 at 16:53 #

    Muy claro Cecilio, muchas gracias por esta contribución !.

    • Cecilio Álvarez Caules 25 Diciembre, 2013 at 10:15 #

      gracias 🙂

  5. juan alberto 29 Marzo, 2014 at 6:21 #

    Interesante Cecilio.

    Tengo algunas dudas.

    Entonces en Android existe el compilador javac todavía ?

    Lo que me gusta es que Android no viene con java microedition como en el caso del ya casi obsoleto blackberry.

    Saludos desde Guatemala!!

    • Cecilio Álvarez Caules 29 Marzo, 2014 at 8:20 #

      es compilador pertenece a oracle asi que no 🙂

  6. Gilberto Ramos 1 Abril, 2014 at 15:56 #

    Otro post muy muy clarito! Genial. Gracias.

    • Cecilio Álvarez Caules 1 Abril, 2014 at 19:38 #

      gracias

  7. Juan Alberto 20 Noviembre, 2014 at 20:53 #

    Hola Cecilio! Muy buen tutorial, gracias por el aporte

    • Cecilio Álvarez Caules 20 Noviembre, 2014 at 22:11 #

      De nada 🙂

Trackbacks/Pingbacks

  1. Ejemplo PhoneGAP con Node.js. - Arquitectura Java - 8 Enero, 2017

    […] Otros artículos relacionados : android eventos , android intents , android y dalvik […]

Deja un comentario