JVM学习--局部变量表

 

变量分类:

1)基本数据类型  、 引用数据类型

2)成员变量(在使用前,都经历过默认初始化值) :类变量(liking的prepare阶段给类变量默认赋值,在initial阶段,给类变量显示赋值及静态代码块赋值)、实例变量(随着对象的创建,会在堆空间中分配实例变量空间,并进行默认赋值)

     局部变量:在使用前,必须进行显示赋值,否则编译不通过

 

 

 

局部变量表,定义为一个数组,主要用于存储方法参数(形参)和定义在方法体内的局部变量,最基本的存储单位是Slot(槽)

局部变量表中存放编译期可知的各种基本数据类型,8种数据类型,引用类型(reference),returnAddress类型的变量

32位以内的类型占用一个Slot,包括returnAddress类型,64位的类型(long和double)占用2个Slot,byte、short、char在存储之前转换为int,boolean在存储前转换为int,0标识false,1 标识true

局部变量表建立在线程私有的栈上,是线程安全的

JVM会为局部变量表的每个Slot分配一个访问索引,通过这个索引可以访问到局部变量表中的局部变量值

占用两个Slot的变量也就是double和long,只需要使用前一个索引即可

如果当前帧是由构造方法或者实例方法创建的,那么该对象引用this将会存在index为0 的Slot处,非静态方法,都会创建this的一个参数,index为0,其余的参数是按照顺序排放的,static 方法被不可以使用this是因为static方法中没有放this的index

 

posted on 2020-03-16 09:01  Flower2021  阅读(1697)  评论(0编辑  收藏  举报