记录生活中的点点滴滴

0%

栈式指令集与寄存器指令集

两种指令集的区别

指令集的架构模型分为基于栈的指令集架构基于寄存器的指令集架构两种,HotSpot虚拟机中的任何操作都需要入栈和出栈的步骤,即使用栈来管理运行,而HotSpot本身就是基于栈的指令集架构
基于寄存器架构的指令集典型应用是传统PC上x86的二进制指令集、Android的Davlik虚拟机(Google在Android上就选择了此种方案)。

下图展示了两种指令集架构的区别:

代码直观演示两种指令集架构

下面举个例子,分别使用这两种指令集计算2+3的结果

在IDEA中对2+3操作进行javap -v反编译,得到了8行指令集。这里只需要要和基于寄存器得出的指令集做一个直观的对比即可,更详细的执行栈式执行过程可以参照下文给出的另一个例子。

而使用寄存器架构对2+3操作的指令集只有下面两行:

总结

由于跨平台性的设计,Java的指令都是根据栈式指令集架构来设计的。不同平台CPU架构不同,所以不能设计为寄存器架构的。栈式架构的优点是跨平台,指令集小,编译器容器实现;缺点是性能下降,实现相同的功能需要更多的指令。