architecture - BEAM 和 JVM 之间有哪些基本的功能/架构差异?

标签 architecture jvm erlang vm-implementation beam

BEAM 和 JVM 之间有哪些基本的功能/架构差异?

  • 是的,我知道:一个最初是围绕 java 构建的,另一个围绕 erlang
  • 构建
  • 我了解 JVM(有点)并想比较它们的结构
  • 例如,我知道 JVM 有一个全局 GC,而 BEAM 每个进程有一个
  • 最佳答案

    首先,Beam 是一台寄存器机,而不是堆栈机。与 Prolog 的 WAM 一样,它使用“X-registers”作为普通寄存器(在 C 中作为数组实现),以及“Y-registers”作为本地函数激活记录中的插槽名称(“调用帧”)在堆栈上。没有堆栈操作指令。

    其次,有快速分配更多堆内存的指令,用于初始化堆上的元组和其他数据结构,用于选择元组的元素等。JVM专注于对象,并且具有隐藏的"new"操作内存分配和基本初始化的细节。

    BEAM 有一条指令,用于递减进程的“减少计数器”并决定是否该让步以让另一个进程运行。另一方面,JVM 具有线程同步指令。

    一个重要的区别是 BEAM 有尾调用指令,这是 JVM 所缺乏的。

    最后,对于 BEAM 和 JVM,目标文件中使用的指令集实际上只是一种传输格式。 BEAM 仿真器将文件中的指令重写为具有许多优化的特殊情况指令的内部版本(可以从一个版本更改为另一个版本)。或者,您可以编译为 native 代码。大多数 JVM 都做同样的事情。

    关于architecture - BEAM 和 JVM 之间有哪些基本的功能/架构差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2276370/

    相关文章:

    architecture - ATM 机的数据系统是否使用最终一致性?

    Java EE - 具有许多 Web 应用程序的应用程序服务器的 JVM

    garbage-collection - Java GC 是确定性的

    erlang - RabbitMQ 通用服务器rabbit_disk_monitor 终止/eheap_alloc : Cannot allocate 229520 bytes of memory (of type "old_heap")

    architecture - 将微服务推广到公共(public) API 的良好做法是什么?

    architecture - 如何管理微服务上的通用前端组件

    java - 帮助正确设计通用套接字服务器

    java - heap为什么要分为Eden、Survivor spaces和Old Generation?

    functional-programming - 检查字符串是否包含 float 或 int

    erlang - 运行 wx Erlang 代码时出错