请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于操作数栈、操作栈和虚拟机栈和程序计数器

有个地方想清楚了解,听的不是很明白

虚拟机栈栈帧中包含操作栈,操作栈栈帧中包含着(局部变量表、操作数栈…)
图片描述

操作数栈和操作栈是不通的东西,前者存储与局部变量表交互的值,后者压入指令
操作栈和虚拟机栈是不同的东西,前者压入方法内部指令,后者压入线程当中方法
stackoverflow指的是虚拟机栈
程序计数器的记录单位是操作栈中的栈帧
这是我的困惑
请指教

正在回答

1回答

同学好,虚拟机栈包含了单个线程每个方法执行的栈帧,栈帧则存储了局部变量表、操作数栈、动态链接和方法出口等信息。每个方法执行中都对应虚拟机栈帧从入栈到出栈的过程。java虚拟机栈用来存储栈帧,而栈帧持有局部变量和部分结果以及参与方法的调用与返回。当方法调用结束结束时,帧才会被销毁;

操作数栈在执行字节码指令过程中被用到,这种方式类似于原生 CPU 寄存器。大部分 JVM 字节码把时间花费在操作数栈的操作上:入栈、出栈、复制、交换、产生消费变量的操作。因此,局部变量数组和操作数栈之间的交换变量指令操作通过字节码频繁执行。

像咱们之前用javap来分析字节码的时候,iload这些字节码指令操作的便是操作数栈

咱里面没说操作栈呢,只是说的是操作数栈。。图里介绍的是JVM指令、局部变量表、操作数栈以及操作数之间的关系。


0 回复 有任何疑惑可以回复我~
  • 提问者 luyuni #1
    这部分还是没太理解</br>
    视频里讲add方法时  提到每一个小框框都是一个栈帧</br>
    那么是一个方法一个栈帧吗,还是一个指令一个栈帧
    回复 有任何疑惑可以回复我~ 2018-12-30 00:04:39
  • 提问者 luyuni #2
    老师是不是这个意思?这些栈帧都是同一个栈帧,是栈帧的状态在随着指令的执行而变化,可以这样理解吗
    回复 有任何疑惑可以回复我~ 2018-12-30 00:15:49
  • 翔仔 回复 提问者 luyuni #3
    同学好,大致明白同学的意思了。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机里面从入栈到出栈的过程,在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧,与这个栈帧相关联的方法称为当前方法。而一个栈帧里面就包含了上面说的操作数栈这些。上图演示的是一个栈帧里面即一次方法的操作,属于同一个栈帧
    回复 有任何疑惑可以回复我~ 2018-12-30 00:31:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信