操作数栈
(可以采用数组或者链表来实现)
先15、8进栈,执行+;
23进栈
15出栈
8出栈
知识点
后进后出的操作数栈,可以成为表达式栈
操作数栈,在方法执行过程中,根据字节码指令,往栈中写入数据或者提取数据,即入栈/出栈
如果被调动的方法带有返回值,其返回值会被压入当前栈帧的操作数栈中,并更新PC寄存器中下一条需要执行的字节码指令
操作数栈中元素的数据类型必须与字节码指令的序列严格匹配
另外,我们说Java虚拟机的解释引擎室基于栈的执行引擎,其中的栈指的就是操作数栈。
操作数栈:主要用于保存计算过程的中间结果,同时作为计算过程中变量的临时的存储空间
操作数栈就是JVM执行引擎的以各工作区,当一个方法刚开始执行的时候,一个新的栈帧也会随之被创建出来,这个方法的操作数栈使空的。
每个操作数栈在编译器就定义好了栈的深度
64位的类型占用两个单位的栈深度。
执行流程
解析:
0. bipush 15 ------》进操作数栈
2.istore_1 ------>出操作数栈-------》进局部变量表
3 bipush 8 -----》进操作数栈
5 istore_2 -----> 出操作数栈 -------》进局部变量表
6 iload_1 ------》从局部变量表-------》进操作数栈
7 iload_2-------> 从局部变量表-------》进操作数栈
8 iadd-------》将操作数栈内容进行相加------》出栈
9 istore_3 ------->将和存储局部变量表
10 退出