2010-02-16 50 views

回答

18

首先,梁是一个注册机器,而不是堆栈机器。与Prolog的WAM一样,它使用作为正常寄存器的“X寄存器”(作为C中的一个数组实现)和“Y寄存器”,它们是本地功能激活记录中的插槽的名称(“调用帧”)在堆栈上。没有堆栈操作指令。其次,有快速分配堆内存几个字的指令,用于初始化堆中的元组和其他数据结构,用于选择元组元素等.JVM专注于对象,并且具有'新的'操作隐藏了内存分配和基本初始化的细节。

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

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

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

相关问题