基于栈的字节码解释执行引擎
基于栈的指令集与基于寄存器的指令集
基于栈的指令集
优点:
1、可移植,因为不同处理器的寄存器不同。
2、代码相对紧凑,大部分都是零地址指令。
缺点:
执行速度慢
原因:完成相同功能所需的指令数量一般会比寄存器架构多,因为出栈、入栈操作本身就产生了相当多的指令数量。
栈实现在内存之中,频繁的栈访问也就意味着频繁的内存访问,不如处理器的寄存器快。
基于栈的解释器执行过程
例:
public int calc() {
int a = 100;
int b = 200;
int c = 300;
return (a + b) * c;
}
使用 javap 命令看看它的字节码指令:
public int calc();
Code:
stack=2, locals=4, args_size=1
0: bipush 100
2: istore_1
3: sipush 200
6: istore_2
7: sipush 300
10: istore_3
11: iload_1
12: iload_2
13: iadd
14: iload_3
15: imul
16: ireturn
javap 提示这段代码需要深度为 2 的操作数栈和 4 个 Slot 局部变量空间,下图描述了执行过程中的代码、操作数栈和局部变量表的变化情况。