目录
- 一:特点:
- 二.执行过程:
- 1.第一步:
- 2.第二步:
- 3.第三步:
- 4.第四步:
一:特点:
- 操作数栈,主要用于保存计算过程中的中间结果,同时作为计算过程中变量临时的存储空间。
- 操作数栈就是JVM执行引擎的一个工作区,当一个方法刚开始执行的时候,一个新的栈帧也会随之被创建,这个方法的操作数栈是空的。
- 每一个操作数栈都会拥有一个明确的栈深度用于存储数值。
- 如果被调用的方法带有返回值的话,其返回值将会被压入当前栈帧的操作数栈中。
- 我们说是java虚拟机的解释引擎是基于栈的执行引擎,其中的栈指的就是操作数栈。
- 如果被调用的方法带有返回值的话,其返回值将会被压入当前栈帧的操作数栈中。
二.执行过程:
反编译后字节码文件如下:
1.第一步:
- bipush: 将值压入操作数栈的操作
- istore_1:将操作数栈中栈顶指针指向的值放入局部变量表中索引为1的地方。(后面的数字一次类推)
- iload_1:将局部变量表中索引为1的值压入操作数栈中。
- iadd:让操作数栈中的数字纷纷出栈,通过执行引擎进行add操作。
PC寄存器中存储第0的指令地址,然后对应指令地址执行对应的操作指令bipush。将15压入操作数栈,此时栈顶指针指向15。
PC寄存中存入2的地址指令,15出栈,进入局部变量表中索引为1的位置(istore_1)(索引为0的位置存放的this)
2.第二步:
8压入操作数栈(bipush),然后出栈进入局部变量表索引为2的位置(istore_2)
3.第三步:
iload_1 和 iload_2 分别将局部变量表中的15和8放入操作数栈中。
4.第四步:
将操作数栈中的15和8分别出栈,进行iadd操作,相加后的值再次压入到操作数栈中。然后执行istore_3.。将23出栈,放入局部变量表索引为3的地方。