BEAM 和 JVM 之间有哪些基本的功能/架构差异?
最佳答案
首先,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/