一、前言
Java 编译器输入的指令流是一种基于栈的指令集架构,还有另一种指令集架构是基于寄存器的指令集架构。
二、两种架构之前的区别
基于栈的架构特点:
- 设计和实现更简单,适用于资源受限的系统;
- 避开了寄存器的分配难题:使用零地址指令方式分配。
- 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现。
- 不需要硬件支持,可移植性更好,更好实现跨平台。
基于寄存器的架构特点:
- 典型的应用是
x86
的二进制指令集:比如传统的 PC,以及 Android 的 Davlik 虚拟机 - 指令集架构则完全依赖于硬件,可移植性差
- 性能优秀,执行效率高
- 花费更少的指令完成一项操作
- 在大部分情况下,基于寄存器架构的指令集都是以一地址指令,二地址指令,三地址指令为主。
三、JVM的生命周期
虚拟机的启动
虚拟机的执行
虚拟机的退出
四、总结
通过上面的一些比较,虽然暂时还不明白底层的实现逻辑,但是先get
到一点,因为不同的CPU架构,寄存器的设计是不一样的,所以不能设计为基于寄存器的方式,否则无法兼容。基于栈的方式,规避了寄存器的限制,但是指令集更小,所以完成一个操作需要执行的指令就更多,自然也就导致执行效率相比于寄存器架构低。