2010-02-16 13 views
15

Quelles sont les différences fondamentales entre les caractéristiques et l'architecture entre le BEAM et la JVM?Quelles sont les différences fondamentales entre les fonctions et l'architecture entre le BEAM et la JVM?

  1. Oui je sais: un a été construit autour de java et l'autre construit autour Erlang
  2. Je comprends la machine virtuelle Java (un peu) et veulent comparer leurs structures
  3. Par exemple, je sais que la machine virtuelle Java a un GC global et BEAM en a un par processus

Répondre

18

Tout d'abord, Beam est une machine de registre, pas une machine de pile. Comme le WAM pour Prolog, il utilise des "registres X" qui sont des registres normaux (implémentés comme un tableau dans C), et des "registres Y" qui sont des noms pour des emplacements dans l'enregistrement d'activation de fonction locale (le "cadre d'appel") sur la pile. Il n'y a pas d'instructions de manipulation de pile. Deuxièmement, il y a des instructions pour allouer rapidement quelques mots de mémoire de tas, pour initialiser des tuples et d'autres structures de données sur le tas, pour sélectionner des éléments de tuples, etc. La JVM est focalisée sur des objets et a un nouveau 'opération qui cache les détails de l'allocation de mémoire et de l'initialisation de base. Le BEAM a une instruction pour décrémenter le "compteur de réduction" pour le processus et décider s'il est temps de céder pour laisser un autre processus s'exécuter. JVM, d'autre part, a des instructions de synchronisation pour les threads.

Une différence importante est que BEAM a des instructions d'appel de fin, ce qui manque à JVM.

Enfin, pour le BEAM et la JVM, le jeu d'instructions utilisé dans les fichiers objets n'est en réalité qu'un format de transport. L'émulateur BEAM réécrit les instructions du fichier dans une version interne avec de nombreuses instructions spéciales optimisées (pouvant changer d'une version à l'autre). Alternativement, vous pouvez compiler en code natif. La plupart des JVM font la même chose.

Questions connexes