sábado, 6 de junio de 2015

Dalvik VM

      Dalvik VM

Dalvik es el nombre de la máquina virtual que utiliza Android (DalvikVM), la cual está basada en registro, diseñada y escrita por "Dan Bornstein" y algunos otros ingenieros de Google. En ella podemos encontrar una gran diferencia con respecto a la máquina virtual Java (JVM), ya que la máquina virtual de Google no está basada en una pila.
Dalvik.equals(Java) == false
        ¿Por qué " Dalvik "? Éste nombre fue elegido por Bornstein en honor a Dalvík,  un pueblo de pescadores de Eyjafjörður (Islandia), donde vivieron algunos de sus antepasados. 
         Dalvik VM es un intérprete que sólo ejecuta los archivos ejecutables con formato .dex (Dalvik Executable). Este formato está optimizado para el almacenamiento eficiente de la memoria, lo cual consigue delegando en el kernel la gestión de hilos (multithreading), de memoria y de procesos.
       La herramienta "dx" incluida en el SDK de Android permite transformar las clases compiladas (.class) por un compilador de lenguaje Java en formato .dex.
       La Dalvik VM también ha sido optimizada para correr múltiples instancias con muy baja huella.

Diferencias con una máquina virtual Java normal

      
En primer lugar, la máquina virtual de Dalvik toma los archivos generados por las clases Java y los combina en uno o más archivos ejecutables Dalvik (. dex), los cuales a su vez son comprimidos en un sólo fichero .apk (Android Package) en el dispositivo. De esta forma, reutiliza la información duplicada por múltiples archivos .class, reduciendo así la necesidad de espacio (sin comprimir) a la mitad de lo que ocuparía un archivo .jar.

        En segundo lugar, Google ha mejorado la recolección de basura en la máquina virtual de Dalvik, pero ha preferido omitir just-in-time (JIT), en esta versión por lo menos. La empresa justifica esta elección diciendo que muchas de las bibliotecas centrales de Android, incluyendo las bibliotecas de gráficos, están implementadas en C y C++. Del mismo modo, Android proporciona una biblioteca de  optimizada para acceder a la base de datos SQLite, pero esta biblioteca está encapsulada en un nivel superior del API de Java. Dado que la mayoría del código del núcleo se encuentra en C y C++, Google argumentó que el impacto de la compilación JIT no sería significativo.


        Por último, la máquina virtual de Dalvik utiliza un tipo diferente de montaje para la generación del código, en el que se utilizan los registros como las unidades primarias de almacenamiento de datos en lugar de la pila. Hay que señalar que el código ejecutable final de Android, como resultado de la máquina virtual de Dalvik, no se basa en el bytecode de Java, sino que se basa en los archivos .dex. Esto significa que no se puede ejecutar directamente el Bytecode de Java, sino que hay que comenzar con los archivos .class de Java y luego convertirlos en archivos .dex.
Formato de un fichero . dex

No hay comentarios:

Publicar un comentario