JVM虚拟机-----运行时数据区-----JVM虚拟机栈-----操作数栈

操作数栈

(可以采用数组或者链表来实现)

先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 退出

原文地址:https://www.cnblogs.com/sicheng-li/p/12965124.html