Dalvik VM: Introducción

android-system-architecture

Open Handset Alliance (OHA) es una alianza global constituada para crear una plataforma de código abierto para terminales móviles. Entre otras, esta alianza la forman Google, Nokia, Samsung, Sony Ericsson, etc.

Android, es el nombre de esa plataforma creada por dicha alianza. Android es un stack completo para correr en no sólo smart phones o teléfonos inteligentes, sino en todo tipo de dispositivos con sistemas embedidos, como televisiones, lectores de libros electrónicos, etc.

Android está basado en un kernel o núcleo de Linux, capa middleware y por supuesto aplicaciones de usuario que corren sobre la capa intermedia.

Lo que hace un sistema operativo usable, es el número y la calidad de las aplicaciones disponibles para ese sistema. Si un sistema opertivo es muy bueno, pero no tiene aplicaciones, los usuarios no lo van a usar.

Esto es precisamente uno de los puntos fuertes de Android y es el crecimiento en cuanto al número y calidad de aplicaciones disponibles. Esto es posible porque Google creó un componente (escrito inicialmente por Dan Bornstein) clave para le ejecución de aplicaciones: Dalvik VM.

La máquina virtual Dalvik es uno de los pilares del éxito de Android en el mercado. Esta VM (máquina virtual) permite a los programadores crear aplicaciones escribiendo código en un lenguaje muy conocido, extendido y bien establecido como es Java.

Dos características a destacar sobre Dalvik:

  1. Es una máquina virtual de aplicación o proceso. Es decir, cada aplicación se ejecuta en un proceso independiente y con su propia instancia de la máquina virtual.
  2. La arquitectura esta basada en registros. Según varios estudios, se ha demostrado que una VM basada en registros, se ejecuta más rápido y requiere menos instrucciones que una VM basada en la pila, como lo es la máquina virtual de Java.
Habiendo dicho todo esta, la pregunta que muchos de ustedes se harán es: ¿Cuál es entonces la relación de Java-Android-Dalvik?

Bien, este es el procedimiento:

  1. Uno escribe una clase en lenguaje Java.
  2. Compilamos dicha clase con el compilador de Java. Esto nos genera un fichero .class con el bytecode de Java.
  3. Convertimos dicho fichero .class en un fichero .dex usando la utilidad llamada dex que es parte del SDK de Android. Un fichero .dex contiene el bytecode de Dalvik y por lo tanto contiene código que ahora Dalvik entiende. Este fichero luego es empaquetado con otros recursos en un archivo .apk (ejecutables de Android).
Nota, si aluna vez has programado algo para Android usando Eclipse, todo esto lo hace el plugin de Google

Una vez dicho todo esto, podemos decir que Android no ejecuta aplicaciones Java.

Por último y para no hacer esta pequeña introducción muy larga comentar que la licencia de Dalvik es Apache.

Más información:

http://www.dalvikvm.com/