Java虚拟机的工作方式与.NET框架公共语言运行时(CLR)工作吗?
还有,是.NET框架CLR是一个“虚拟机”,还是它没有虚拟机的属性?
发布于 2018-02-24 08:56:55
这两种实现有很多相似之处(在我看来:是的,它们都是“虚拟机”)。
首先,它们都是基于堆栈的VM,没有“寄存器”的概念,就像我们习惯于在像x86或PowerPC这样的现代CPU中看到的那样。所有表达式((1+1)/2)的计算是通过将操作数推入“堆栈”,然后在指令(Add、Divide等)需要消耗这些操作数时将这些操作数从堆栈中弹出。每个指令将其结果推回堆栈。
这是实现虚拟机的一种方便的方法,因为世界上几乎每个CPU都有一个堆栈,但是寄存器的数量通常是不同的(而且有些寄存器是特殊用途的,每条指令都希望在不同的寄存器中使用操作数,等等)。
所以,如果你要对一个抽象机器建模,一个纯粹基于堆栈的模型是一个很好的方法。
当然,真正的机器不是那样运作的。因此,JIT编译器负责执行字节码操作的“注册”,实质上是将实际的CPU寄存器调度为尽可能包含操作数和结果。
因此,我认为这是CLR和JVM之间最大的共同点之一。
发布于 2018-02-24 10:17:41
一个重要的区别是CLR被设计成一个与语言无关的体系结构,这与JVM不同。
另一个重要的区别是CLR是专门为允许与本机代码的高度互操作性而设计的。这意味着当本机内存被访问和修改时,clr必须管理可靠性和安全性,而且管理编组基于CLR的数据结构和本机数据结构之间。
https://stackoverflow.com/questions/-100007417
复制相似问题