2010-02-16 67 views

回答

18

首先,梁是一個註冊機器,而不是堆棧機器。與Prolog的WAM一樣,它使用作爲正常寄存器的「X寄存器」(作爲C中的一個數組實現)和「Y寄存器」,它們是本地功能激活記錄中的插槽的名稱(「調用幀」)在堆棧上。沒有堆棧操作指令。其次,有快速分配堆內存幾個字的指令,用於初始化堆中的元組和其他數據結構,用於選擇元組元素等.JVM專注於對象,並且具有'新的'操作隱藏了內存分配和基本初始化的細節。

BEAM有一個指令,用於減少進程的「減少計數器」,並決定是否是讓時間讓另一個進程運行。另一方面,JVM具有線程的同步指令。

一個重要的區別是BEAM有尾調用指令,JVM缺乏。

最後,對於BEAM和JVM,目標文件中使用的指令集實際上只是一種傳輸格式。 BEAM仿真器將來自文件的指令重寫爲具有許多優化的特例指令(可以從一個版本改變爲另一個版本)的內部版本。或者,您可以編譯爲本地代碼。大多數JVM都做同樣的事情。

相關問題