2010-02-16 7 views
15

Что представляет собой фундаментальная разница в характеристиках/архитектуре между BEAM и JVM?Какие основные отличительные особенности/архитектурные различия между BEAM и JVM?

  1. Да, я знаю: один был построен вокруг Java, а другой построен вокруг Эрл
  2. Я понимаю JVM (несколько) и хотите, чтобы сравнить их структуры
  3. Например, я знаю, что виртуальная машина имеет один Глобальные GC и BEAM имеют один за каждый процесс

ответ

18

Прежде всего, Beam является регистрационной машиной, а не стековой машиной. Подобно WAM для Prolog, он использует «X-регистры», которые являются нормальными регистрами (реализованы как массив в C) и «Y-регистры», которые являются именами слотов в записи активации локальной функции («кадр вызова») в стеке. Нет инструкций по манипулированию стеком.

Во-вторых, есть инструкции для быстрого выделения еще нескольких слов памяти кучи, для инициализации кортежей и других структур данных в куче, для выбора элементов кортежей и т. Д. JVM ориентирован на объекты и имеет «новый ', которая скрывает детали распределения памяти и базовой инициализации.

BEAM имеет инструкцию для уменьшения «счетчика уменьшения» для процесса и принятия решения о том, пришло ли время, чтобы запустить другой процесс. JVM, с другой стороны, имеет инструкции синхронизации для потоков.

Важным отличием является то, что BEAM имеет инструкции по вызову хвоста, которых нет в JVM.

Наконец, для BEAM и JVM набор инструкций, используемый в объектных файлах, действительно является только транспортным форматом. Эмулятор BEAM перезаписывает инструкции из файла во внутреннюю версию со многими оптимизированными специальными инструкциями (которые могут меняться от одного выпуска к другому). Кроме того, вы можете скомпилировать собственный код. Большинство JVM делают то же самое.

 Смежные вопросы

  • Нет связанных вопросов^_^