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

来源:6-9 Java内存模型之线程独占部分-2

luyuni

2018-12-29

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

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

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

写回答

1回答

翔仔

2018-12-29

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

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

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

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


0
4
luyuni
回复
翔仔
谢谢老师完全明白了
2018-12-30
共4条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程