java slot_运行时栈帧结构-局部变量表-探究slot复用

局部变量表

我们知道,一个方法的调用开始,相当于一个栈帧(Stack Frame)在Java虚拟机栈中的入栈和出栈。

栈帧(Stack Frame)包括:局部变量表、操作数栈、动态链接、返回地址等。

下图:每个线程对应一个Java虚拟机栈,Java虚拟机栈中有很多栈帧(Stack Frame)

ea9ef95d560a6d586537523b19033225.png(图片来源:csdn-骁兵)

栈帧(Stack Frame)的局部变量表:存放方法参数和局部变量的内存区域。

java数据类型包括:byte boolean char short int long float double reference(对象引用数据类型,是指向堆内存的引用)

栈帧(Stack Frame)的局部变量表中的最小单位为slot。jvm规范中没有特定指定slot的大小,通常在32位操作系统中,slot占32位,此时long/double占两个slot。再64位操作系统中,slot占64位。所有数据类型都占1个slot。

slot复用

当一个变量的pc寄存器的值大于slot的作用域的时候,slot是可以复用的。(抄的,我也不懂。所以自己做实验)

写一个测试类aa:

/**

* Description:测试slot复用

* 运行参数:-verbose:gc

* 结果:大对象a不会被gc回收掉

* 分析:由于在gc的时候,对象a还是可达对象(因为局部变量表slot1位置引用了对象a)。所以gc不会回收a

* @author LiuXianfa

* @date 2018/4/3

*/

public class aa {

public static void main(String[] args) {

byte[] a = new byte[60*1024*1024];

int b= 10;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值