虚拟机(九).栈帧

1.栈帧:虚拟机用来进行方法调用和方法执行的数据结构

2.栈帧的组成 = 局部变量表 + 操作数栈 + 动态链接 + 方法返回地址 + 其他信息

3.局部变量表

        (1).存放的内容 = 方法参数列表对应的值 + 方法内定义的局部变量的值

        (2).局部变量表 = 变量槽 * n(即多个变量槽构成)

                1).一个变量槽存放一个32位以内的数据类型:char,int ,bit,boolean,float,short,reference,returnAddress

                2).64位的数据结构就需要2个变量槽:long,double

                3).变量槽的访问是根据索引定位来完成的

        (3).局部变量表和类变量不同,类变量有一个初始化赋值的过程,局部变量表中的值如果不赋值,那就真的是没值

4.操作数栈

        (1).数据结构 = 先入后出的栈结构

        (2).操作数栈在编译的过程中最大深度就已经确定好了

        (3).操作数栈中的数据类型必须严格遵照字节码指令规定的类型

        (4).从概念模型上来看,每一个栈帧是独立的。但是实际上上一个栈帧的局部变量表会和下一个栈帧的操作数栈有一部分重合

        (5).java虚拟机的解释执行引擎 = 基于栈的执行引擎

5.动态链接

        每一个栈帧都包含一个指向运行时常量池的该栈帧多对应的方法,用于动态链接

6.方法返回地址

        (1).方法返回的两种方式 = 执行引擎遇到方法返回的指令 + 遇到错误

        (2).不管哪种方法返回,程序都会回到上一层继续执行,那么栈帧中需要保存一些方法返回的信息。最常见的信息就是保存上一层的计数器,好让程序能准确定位到上一层

7.其他信息

        一些调试信息啥的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹏哥哥啊Aaaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值