操作数栈(Operand Stack)也称作操作栈,是一个后入先出栈(LIFO)。随着方法执行和字节码指令的执行,会从局部变量表或对象实例的字段中复制常量或变量写入到操作数栈,再随着计算的进行将栈中元素出栈到局部变量表或者返回给方法调用者,也就是出栈/入栈操作。
通过以下代码演示操作站执行
public class StackDemo2 {
public static void main(String[] args) {
int i = 1;
int j = 2;
int z = i + j;
}
}
程序运行
- 1):程序计数器找到对应的偏移量进行指针
- 2): 程序第一次运行找到第0个地址(0 被程序计数器拿到)
- 3): 程序计数器拿到第一个位置0,就要去拿到第一个对应的保存命令
- 4): (int i =1) “1” 定义到操作数栈中
-
- : a-偏移量继续向下走(1 重新赋值给我们的计数器),
b-执行第二个保存指令(将操作数栈中的1拷贝到局部变量表中这个过程)
-
6): 接下来指针继续往下走.重复上面1-5过程(int j=2)
-
7): 局部变量表中的1加载到操作数栈中
-
8): 局部变量表中的2加载到操作数栈中
-
9): 执行add i + j = 3
-
10): 把操作数栈中执行add后的结果3 保存的局部变量表中
-
11): 返回