JVM笔记-7Java虚拟机栈(栈帧&&局部变量表)

学习JVM的一点简单笔记,宋红康老师jvm讲的很好,感谢。

尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)


栈的存储单位

方法和栈帧一一对应。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

局部变量表(Local Variables)

也叫本地变量表

在这里插入图片描述

编译后打开jclass插件:
在这里插入图片描述
main方法:局部变量表最大容量,字节码长度(从0开始)
在这里插入图片描述
行号表:
在这里插入图片描述
Line Number 对应Java代码开始的行号。

Start pc 对应字节码内的行号


局部变量表
在这里插入图片描述
index 索引

Start pc 字节码行号——对照行号表,知道作用域开始位置

length 作用域有效的长度。

通过 start pc 和 length 描述当前作用域的范围。(两者之和为 字节码长度)

声明完后,作用。

在这里插入图片描述

[ 表示数组类型
L 表示引用类型
I int型


在这里插入图片描述


slot(槽)

局部变量表的基本单位。
在这里插入图片描述
在这里插入图片描述
索引使用起始索引。

按照声明顺序,放入。

构造方法或非静态方法(实例),因为没有静态的声明,会多一个引用。(this)
在这里插入图片描述
this 也作为一个变量(参数)。放入局部变量表中。(构造器也可以调用this),即构造方法或实例方法可以使用this,因为对应局部变量表中有this,即可以使用。this会首先放在首位 index = 0。

静态的方法中,不能引入this,因为this变量不存在当前方法的局部变量表中,所以不能使用this。


在这里插入图片描述
this放在首位。
在这里插入图片描述
this在首位。
double类型占据两个 slot,可以看到 局部变量表中,索引下标直接从3-5,即3、4都是,调用时直接使用3就好。
在这里插入图片描述
构造器中,也只有this,即当前正在创建的变量。


局部变量表长度。不是直接等于变量数量。(this、重复利用slot)
在这里插入图片描述
在这里插入图片描述
这里b出了大括号,就销毁了,但是局部变量表开辟了空间,为了节省资源,变量c使用已经销毁的b占据的slot的位置。所以c的index为2.


在这里插入图片描述


Java中变量分类

在这里插入图片描述

数据类型分类

按照数据类型分类:

  • 基本数据类型

  • 引用数据类型


在类中声明的位置分类

按照在类中声明的位置分类:

  • 成员变量 :使用前,都经历过默认初始化赋值。

  • 局部变量:使用前,必须使用显式赋值,否则编译不通过。 在这里插入图片描述
    错误信息:变量未初始化。

其中成员变量也可以细分:

  • 类变量(静态变量 static):链接阶段(linking)的准备(prepare)阶段,给类变量默认赋值。——>初始化阶段(initialization)给类变量显式赋值即静态代码块赋值。(如果没有显式赋值,就跳过初始化阶段,直接使用默认值)

  • 实例变量:随着对象的创建,会在堆空间中分配实例变量空间,并进行默认赋值。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值