art java android jvm dvm

java - art android



¿Cuál es la diferencia entre DVM y JVM? (6)

Conceptualmente, hay poca diferencia desde un nivel de aplicación entre un DVM y una JVM. Arquitectónicamente, existe una gran diferencia entre el DVM basado en registro y el JVM basado en pila.

Ambos usan un modelo de código VM. Sin embargo, el DVM utiliza códigos de operación basados ​​en registro que son comparables a las instrucciones de bytecode basadas en registro que la mayoría de las plataformas de destino ya ejecutan. Esto incluye arquitecturas como las disponibles de ARM y MIPS y las arquitecturas compatibles con x86 de Intel, AMD y VIA Technologies.

Google desarrolló Android y eligió DVM por varias razones. Primero, hubo problemas de licencia con la mayoría de las JVM. A continuación, el DVM debería ser más eficiente en términos de uso de memoria y rendimiento en una máquina basada en registros. También se supone que DVM es más eficiente cuando se ejecutan varias instancias del DVM. Las aplicaciones tienen su propia instancia. Por lo tanto, múltiples aplicaciones activas requieren múltiples instancias de DVM. Al igual que la mayoría de las implementaciones de Java, el DVM tiene un recolector de basura automático.

Más sobre eso

¿Cuál es la diferencia entre Java Virtual Machine y Dalvik Virtual Machine?


DVM está basado en registro, que está diseñado para ejecutarse en memoria baja, usa su propio código de bytes y ejecuta el archivo .Dex

JVM está basado en pila que usa código de byte de Java y ejecuta el archivo .class que tiene JIT.

El compilador de Java compila el código fuente de Java en archivos .class. Luego, la herramienta dx (dexer), que forma parte de Android SDK, procesa los archivos .class en un formato de archivo llamado DEX que contiene bytecode de Dalvik. La herramienta dx elimina toda la información redundante que está presente en las clases. En DEX, todas las clases de la aplicación se empaquetan en un solo archivo. DVM ha sido diseñado para que un dispositivo pueda ejecutar múltiples instancias de la máquina virtual de manera eficiente.

las máquinas basadas en pila deben usar instrucciones para cargar datos en la pila y manipular esos datos, y así requerir más instrucciones que registrar máquinas para implementar el mismo código de alto nivel, pero las instrucciones en una máquina registradora deben codificar los registros fuente y destino y, por lo tanto, tienden a ser más grandes.


El DVM difiere de la JVM en varias formas. Primero, es una máquina basada en registro, a diferencia de la JVM basada en pila. Y en lugar de múltiples archivos de clase agrupados en un archivo jar, el DVM usa un único archivo ejecutable de Dalvik (DEX) con una estructura y códigos de operación diferentes.


Jvm funcionará en base al código de bytes y el dvm funcionará en base a un código de bytes optimizado, está optimizado para plataformas móviles porque los dispositivos móviles tienen poca memoria y un proceso bajo, por eso está utilizando el kernel de Linux.


La arquitectura jvm se basa en la pila mientras que la arquitectura dvm está basada en registros. Las máquinas basadas en pila requieren más instrucciones (es decir, un conjunto de instrucciones más grande) que las máquinas basadas en registros para la misma tarea. Por otro lado, cada instrucción en las máquinas basadas en registro es más grande.


Cuando una máquina virtual Java comienza a ejecutar un programa, necesita memoria para almacenar muchas cosas, incluso códigos de bytes y otra información que extrae de archivos de clase cargados, objetos que el programa crea, parámetros para métodos, valores de retorno, variables locales y resultados intermedios de cálculos .

La máquina virtual Java organiza la memoria que requiere para ejecutar un programa en varias áreas de datos de tiempo de ejecución.

Generalmente, las máquinas basadas en pila deben usar instrucciones para cargar datos en la pila y manipular esos datos, y, por lo tanto, requieren más instrucciones que las máquinas de registro para implementar el mismo código de alto nivel, pero las instrucciones en una máquina registradora deben codificar la fuente y registros de destino y, por lo tanto, tienden a ser más grandes.

Esta diferencia es principalmente importante para los intérpretes de VM para los que el despacho de opcode tiende a ser costoso y otros factores son relevantes para la compilación de JIT.

Optimizado para requisitos de poca memoria, Dalvik tiene algunas características específicas que lo diferencian de otras máquinas virtuales estándar >>>>>

La VM simplemente se redujo para usar menos espacio --- >> Dalvik actualmente no tiene compilador Just-In-Time (JIT), pero Android 2.0 incluye una fuente experimental para uno (deshabilitado por defecto). El grupo de constantes se ha modificado para usar solo índices de 32 bits para simplificar el intérprete. Utiliza su propio código de bytes, no el bytecode de Java * * *