概述
目录
- 一:特点:
- 二.执行过程:
- 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的地方。
最后
以上就是务实鱼为你收集整理的JVM Java虚拟机栈(栈帧:操作数栈)的全部内容,希望文章能够帮你解决JVM Java虚拟机栈(栈帧:操作数栈)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复