Pourquoi la JVM de pile, et le Dalvik VM en fonction de registre?
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 s'articulent?
- Est que la décision de Google de faire de la DalvikVM en fonction de registre? Je pense que DalvikVM a été mis en œuvre avant que Google a racheté la Android Inc.
- Vous avez raison, bien sûr. (Pas très pertinent pour la question de bien 😉
Vous devez vous connecter pour publier un commentaire.
Il ya quelques attributs d'une pile de VM qui cadrent bien avec Java objectifs de conception:
Une pile basée sur le design fait 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.
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.
Aller 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 ne comprend pas une JIT à tous. 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.
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 quelques 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:
et sur la diapositive 36:
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 vidéo de présentation commence à 25:00.
Il y a aussi perspicaces document intitulé "De la Machine virtuelle Showdown: Pile Versus Registres" de Shi et coll. (2005), qui explore les différences entre la pile et les registres des machines virtuelles.
Je ne sais pas pourquoi le Soleil a décidé de faire de la JVM à pile. Erlangs de la machine virtuelle, 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:
Et concernant la taille du code:
Et que je me souviens Architecture Des Ordinateurs: Une Approche Quantitative également conclure qu'un registre de la machine fonctionnent mieux que d'une machine à pile.