112 votes

Pourquoi la pile JVM et la machine virtuelle Dalvik sont-elles basées sur des registres?

Je suis curieux, pourquoi avez-Soleil décider de faire la JVM de pile, et Google décide de faire le DalvikVM en fonction de registre?

Je suppose que la JVM ne peut pas vraiment supposer qu'un certain nombre de registres sont disponibles sur la plate-forme cible, puisqu'il est censé être indépendant de la plateforme. À cet effet, il juste reporte le registre d'allocation, etc, pour le compilateur JIT. (Corrigez-moi si je me trompe.)

Si l'Android les gars, dit, "hey, c'est inefficace, let's go pour un registre vm tout de suite..."? Mais attendez, il y a plusieurs différents appareils android, quel est le nombre de registres ne le Dalvik cible? Sont le Dalvik opcodes codé en dur pour un certain nombre de registres?

Faire tous les appareils Android sur le marché ont environ le même nombre de registres? Ou, est-il un registre de ré-allocation effectuée pendant dex-chargement? Comment tout cela?

74voto

Mark Bessey Points 13931

Il ya quelques attributs d'une pile de VM qui cadrent bien avec Java objectifs de conception:

  1. Une pile de conception basée sur le fait que très peu de hypothèses sur la cible matériel (registres, les fonctionnalités du PROCESSEUR), il est donc facile à mettre en œuvre une VM sur un grande variété de matériel.

  2. Depuis les opérandes pour les instructions sont en grande partie implicite, l'objet code aura tendance à être plus petits. Cette est important si vous allez être le téléchargement du code lent lien réseau.

Allez avec un indicateur de régime signifie probablement que Dalvik du générateur de code n'a pas à travailler aussi dur pour produire du code performant. En cours d'exécution sur une très registre riches ou inscrivez-pauvres architecture serait probablement handicap Dalvik, mais ce n'est pas la cible habituelle - BRAS est un très middle-of-the-road architecture.


J'avais aussi oublié que la version initiale de Dalvik n'inclut pas de JIT. Si vous allez interpréter les instructions directement, puis un en fonction de registre système est probablement un gagnant pour l'interprétation de la performance.

38voto

Flow Points 8018

Je ne peux pas trouver une référence, mais je pense que le Soleil a décidé de la pile à base de bytecode approche car il est facile à exécuter la JVM sur une architecture avec peu de registres (par exemple IA32).

Dans Dalvik VM Internes de Google I/O de 2008, le Dalvik créateur Dan Bornstein donne les arguments suivants pour le choix d'un registre de la VM sur la diapositive 35 de la les diapositives de la présentation:

Registre De La Machine

Pourquoi?

  • éviter d'instructions d'expédition
  • éviter les accès à la mémoire
  • consommer volet enseignement efficace (plus la densité sémantique par instruction)

et sur la diapositive 36:

Registre De La Machine

Les stats

  • 30% aiguière d'instructions
  • 35% de moins d'unités de code
  • 35% plus d'octets dans le flux d'instructions
    • mais nous arrivons à consommer deux à la fois

Selon Bornstein c'est "une attente générale de ce que vous pouvez trouver lorsque vous convertir un ensemble de fichiers de classe à dex fichiers".

La partie pertinente de la présentation de la vidéo commence à 25:00.

14voto

Jonas Points 22309

Je ne sais pas pourquoi le Soleil a décidé de faire de la JVM à pile. Erlangs de la machine virtuelle, le FAISCEAU est basé sur les registres pour des raisons de performances. Et Dalvik semblent également être basé sur les registres en raison des raisons de performances.

De Pro Android 2:

Dalvik utilise les registres principalement comme des unités de stockage de données au lieu de la pile. Google est dans l'espoir d'accomplir 30 pour cent moins d'instructions en conséquence.

Et concernant la taille du code:

Le Dalvik VM prend le générés les fichiers de classe Java et les combine en une ou plusieurs Dalvik Exécutables (.dex) des fichiers. Il réutilise dupliquer l'information à partir de plusieurs fichiers de classe, de réduire efficacement l'espace requis (non compressé) par la moitié de la traditionnelle .fichier jar. Par exemple, l' .dex fichier du navigateur web app Android est d'environ 200k, alors que l'équivalent non compressé .jar version est d'environ 500k. L' .dex fichier de l'alarme de l'horloge est d'environ 50k, et à peu près le double de la taille de son .jar version.

Et comme je me souviens de l'Architecture de l'Ordinateur: Une Approche Quantitative également conclure qu'un registre de la machine fonctionnent mieux que d'une machine à pile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X