Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。
举个最简单的例子,分别使用这两种指令集计算“1+1”的结果
//基于栈的指令
iconst_1
iconst_1
iadd
istore_0
//基于寄存器指令
mov eax,1
add eax,1
基于栈的指令集主要的优点就是可移植, 缺点是执行速度慢,相同操作指令数要多很多。
寄存器由硬件直接提供,程序直接依赖这些硬件寄存器则不可避免地要受到硬件的约束。
虽然栈架构指令集的代码非常紧凑,但是完成相同功能所需的指令数量一般会比寄存器架构多,因为出栈、入栈操作本身就产生了相当多的指令数量。更重要的是,栈实现在内存之中,频繁的栈访问也就意味着频繁的内存访问,相对于处理器来说,内存始终是执行速度的瓶颈。
两种架构之间的区别:
基于栈式架构的特点:
- 设计和实现更简单,适用于资源受限的系统;
- 避开了寄存器的分配难题:使用零地址指令方式分配。
- 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小
- 编译器容易实现。
- 不需要硬件支持,可移植性更好,更好实现跨平台
基于寄存器架构的特点:
- 典型的应用是x86的二进制指令集:比如传统的Pc以及Android的Davlik虚拟机。

本文探讨了JVM的基于栈的指令集架构与基于寄存器的指令集架构之间的差异。栈式架构强调可移植性,指令集小但执行效率较低;寄存器式架构则注重性能,指令执行更高效,但可移植性差。Java选择栈式架构主要是为了跨平台兼容性。
最低0.47元/天 解锁文章
346

被折叠的 条评论
为什么被折叠?



