web-dev-qa-db-fra.com

Quelle est la différence entre DVM et JVM?

Quelle est la différence entre une machine virtuelle Java et une machine virtuelle Dalvik?

68
anish

DVM est basé sur Register, conçu pour fonctionner avec peu de mémoire, utilise son propre code octet et exécute le fichier .Dex

La machine virtuelle Java est basée sur la pile, elle utilise le code octet Java et exécute le fichier .class contenant JIT.

Le code source Java est compilé par le compilateur Java en fichiers .class . Ensuite, l’outil dx (dexer), composant du SDK Android, traite les fichiers .class dans un format de fichier appelé DEX contenant le bytecode de Dalvik . L'outil dx élimine toutes les informations redondantes présentes dans les classes . Dans DEX, toutes les classes de l'application sont regroupées dans un seul fichier . DVM a été conçu pour qu'un périphérique puisse exécuter plusieurs instances du VM efficacement.

les machines reposant sur des piles doivent utiliser des instructions pour charger des données sur la pile et les manipuler, ce qui nécessite plus d'instructions que de machines enregistreuses pour implémenter le même code de haut niveau, mais les instructions d'une machine enregistreuse doivent coder les registres source et de destination. et, par conséquent, ont tendance à être plus grande. 

76
Mayuri

Conceptuellement, il y a peu de différence par rapport à un niveau d'application entre un DVM et une JVM . Sur le plan architectural, il existe une majeure différence entre les registres DVM et la machine virtuelle Java basée sur la pile.

Les deux utilisent un modèle de code VM. Cependant, le DVM utilise des opcodes basés sur les registres qui sont comparables à la base de registre instructions de bytecode que la plupart des les plates-formes cibles sont déjà exécutées. Ce inclut des architectures telles que celles disponible auprès de ARM et de MIPS et du Architectures compatibles x86 à partir de Intel, AMD et VIA Technologies.

Google a développé Android et a choisi DVM pour plusieurs raisons. Tout d'abord, il y avait problèmes de licence avec la plupart des machines virtuelles. Suivant, le DVM devrait être plus efficace en termes d'utilisation de la mémoire et de performances sur une machine à registre. DVM est également censé être plus efficace lors de l'exécution de plusieurs instances du fichier DVM. Les applications reçoivent leurs propres exemple. Par conséquent, plusieurs actifs les applications nécessitent plusieurs DVM les instances. Comme la plupart des Java mises en œuvre, le DVM a un collecteur de déchets automatique.

En savoir plus

26
DixonD

L'architecture jvm est basée sur une pile, tandis que l'architecture dvm est basée sur des registres. Les machines basées sur des piles nécessitent plus d'instructions (c'est-à-dire un jeu d'instructions plus grand) que les machines basées sur des registres pour la même tâche. De l'autre côté, chaque instruction dans les machines à base de registres est plus grande.

7
sky

Lorsqu'une machine virtuelle Java commence à exécuter un programme, elle a besoin de mémoire pour stocker beaucoup de choses, y compris les bytecodes et autres informations extraites à partir des fichiers de classe chargés, objets que le programme instancie, paramètres à méthodes, valeurs de retour, variables locales et résultats intermédiaires des calculs.

La machine virtuelle Java organise la mémoire nécessaire à l'exécution d'un programme dans plusieurs zones de données d'exécution. 

Généralement, les machines à pile doivent utiliser des instructions pour charger des données sur la pile et manipuler ces données, et donc requérir plus d'instructions que enregistrer des machines pour mettre en œuvre le même code de haut niveau, mais les instructions dans un registre, la machine doit coder les registres source et de destination et, par conséquent, ont tendance à être plus grande.

Cette différence est principalement importante pour les interprètes VM pour qui le traitement de l'opcode Dispatch a tendance à coûter cher et pour que d'autres facteurs soient pertinents pour la compilation JIT.

Optimisé pour de faibles besoins en mémoire, Dalvik présente des caractéristiques spécifiques qui le différencient des autres machines virtuelles standard >>>>>

La VM a simplement été réduite pour utiliser moins d’espace --- >> Dalvik n’a actuellement pas de compilateur juste-à-temps (JIT), mais Android 2.0 Inclut une source expérimentale pour un (désactivé). par défaut) . Le pool constant a été modifié pour utiliser uniquement des index 32 bits afin de simplifier l'interprète. Il utilise son propre bytecode, pas le bytecode Java * *

4
Sheel

Voici une comparaison tabulaire ( Source : M. Atul ):

enter image description here

0
pulp_fiction

Jvm fonctionnera sur la base du code octet et le dvm fonctionnera sur la base du bytecode optimisé. Il est optimisé pour les plates-formes mobiles car les périphériques mobiles ont peu de mémoire et de processus, c’est pourquoi il utilise le noyau kernel.

0
ramesh

Le DVM diffère de la machine virtuelle de plusieurs manières. Tout d’abord, c’est une machine Basée sur des registres, contrairement à la JVM basée sur des piles. Et au lieu de plusieurs fichiers de classe Regroupés dans un fichier jar, le DVM utilise un seul fichier exécutable Dalvik (DEX) avec une structure Différente et des codes opération.

0
zerocool