美文网首页
结合演绎推理来与矛盾法来理解变量槽

结合演绎推理来与矛盾法来理解变量槽

作者: 乙腾 | 来源:发表于2020-09-25 00:14 被阅读0次

变量槽相关知识的理解与佐证

参数值的存放总是在局部变量数组的index0开始,到数组长度-1的索引结束

image.png

局部变量表,最基本的存储单元是Slot(变量槽)

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

在局部变量表里,32位以内的类型只占用一个slot(包括returnAddress类型),64位的类型(long和double)占用两个slot。
byte、short、char、float在存储前被转换为int,boolean也被转换为int,0表示false,非0表示true;
long和double则占据两个slot。

JVM会为局部变量表中的每一个slot都分配一个访问索引,通过这个索引即可成功访问到局部变量表中指定的局部变量值

434853468.png

notice:

n1.槽位其实是维护的数组
n2.比如long,double都是占用两个槽,那么他们的索引是几呢?
占用两个槽位,索引为起始索引。

当一个实例方法被调用的时候,它的方法参数和方法体内部定义的局部变量将会按照顺序被复制到局部变量表中的每一个slot上

槽位其实是维护的数组,数组是有序的,那么局部变量放到数组中也得是有序的,这个顺序按照按照声明顺序,先声明的放在前面。


435351281.png

可以发现槽位的索引确实是按照生命顺序排序的。

如果需要访问局部变量表中一个64bit的局部变量值时,只需要使用前一个索引即可。(比如:访问long或者double类型变量)

这个前面强调过了,占用两个槽位的变量,使用起始索引。

如果当前帧是由构造方法或者实例方法创建的,那么该对象引用this将会存放在index为0的slot处,其余的参数按照参数表顺序排列

通过三段演绎推理可以得出这么个结论:
静态方法没有this。

演绎推理过程:

大前提:当帧是由构造方法或者实例方法(非static方法)创建的时候,该对象引用this将会存放在index为0的slot处,其余的参数按照参数表顺序排列。
小前提:方法有两种,静态和实例方法(非静态)。
结论:静态方法没有this

量化佐证

线性量化佐证

实例方法的局部变量表


image.png

静态方法


image.png
矛盾量化佐证
436312000.png

静态方法中,用this编译报错。

如果不接收其他方法返回值,不占用局部变量表的slot

不接收方法返回值


image.png

接收方法返回值


image.png

栈帧中的局部变量表中的槽位是可以重复利用的,如果一个局部变量过了其作用域,那么在其作用域之后申明的新的局部变量就很有可能会复用过期局部变量的槽位,从而达到节省资源的目的。

这句话可以分为这么两步去理解

1.局部变量表的槽位是可以重复利用的

其实这句话是可以推理出来的
大前提:数组是可以修改的
小前提:槽位通过数组维护
结论:槽位是可以修改的,即可以重复利用的。

2.如果一个局部变量过了其作用域,那么在其作用域之后申明的新的局部变量就很有可能会复用过期局部变量的槽位

这句话,实际就是在讲什么时候才可以重复利用,即槽位可以重复利用的时机:
重复利用,是分为两个动作的,老的数据从槽位出来,新的数据进入槽位。那么什么时候老数据从槽位中出来?那就是过了其作用域。

通过以上分析,这句话就可以连起来理解了,栈帧中的局部变量表的槽位可以重复利用,一旦一个局部变量过了其作用域,其就会从现有槽位中释放,新的数据就可以利用其的槽位了,从而达到节省资源的目的。

量化佐证

437478671.png 437500390.png

可以发现过了b的作用域后,c可以利用其槽位,索引也是2。

相关文章

  • 结合演绎推理来与矛盾法来理解变量槽

    变量槽相关知识的理解与佐证 参数值的存放总是在局部变量数组的index0开始,到数组长度-1的索引结束 局部变量表...

  • 金字塔原理阅读笔记

    今天重温了演绎推理与归纳推理,现在对这两种推理方式有了更深刻的理解,由于演绎推理在表达上会显得很繁琐冗长,所以一般...

  • 立春论《演绎与归纳》

    【演绎】(Deductive reasoning)一般称为演绎法或演绎推理。它是指从数个已知命题通过推理得出新命题...

  • 用演绎推理来构思,用归纳推理来呈现。

    逻辑和阅读效率的关系是什么?为什么会这样? 逻辑和阅读的效率关系就是大脑接受信息,分拣信息,处理信息和判断信息的过...

  • 贝叶斯网络,看完这篇我终于理解了(附代码)!

    1. 对概率图模型的理解 概率图模型是用图来表示变量概率依赖关系的理论,结合概率论与图论的知识,利用图来表示与模型...

  • 2019-08-24贝叶斯网络,看完这篇我终于理解了

    1. 对概率图模型的理解 概率图模型是用图来表示变量概率依赖关系的理论,结合概率论与图论的知识,利用图来表示与模型...

  • 学习笔记|因果论可靠吗?

    因果论是一种逻辑推理,从原因到结论。常见的逻辑推理方式分为演绎法和归纳法。 演绎法是一种从一般原理到个别案例的推理...

  • 涓涓说(20210505)

    【推理】 涓涓:妈妈,什么叫推理呀? 妈妈:推理呀,就是根据事物发展的逻辑来演绎事物发展的结果。 爸爸:服了,妈妈...

  • 推理演绎法

    最近被朋友安利了一本悬疑小说《推理演绎法》,最近书荒,当然一推就看,一本50元不到,买不了上当,买不了吃亏。 一口...

  • #30天专注橙长计划#+写作+Day10

    金字塔原理第五章 演绎推理与归纳推理 本章主要介绍同层思想之间的逻辑关系,包括演绎推理和归纳推理。 演绎推理的步骤...

网友评论

      本文标题:结合演绎推理来与矛盾法来理解变量槽

      本文链接:https://www.haomeiwen.com/subject/klxzyktx.html