Каковы некоторая фундаментальная Функция / Архитектурные различия между ЛУЧОМ и JVM?

Каковы некоторая фундаментальная Функция / Архитектурное различие между ЛУЧОМ и JVM?

  1. Да я знаю: каждый был первоначально создан вокруг Java и другой созданный вокруг erlang
  2. Я понимаю JVM (несколько) и хочу сравнить их структуры
  3. Например, я знаю, что JVM имеет один Глобальный GC, и ЛУЧ имеет одно для каждого процесса
15
задан jtzero 6 April 2018 в 19:58
поделиться

1 ответ

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

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

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

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

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

19
ответ дан 1 December 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: