一些关于虚拟机的整理

1.局部变量表相关 

    局部变量表是运行时栈帧的组成部分,存储一组变量值(方法参数和方法内部变量),该方法的局部变量表容量在编译为Class时刻确定。

   容量以slot为单位,可容纳32位以内数据,double和long占用两个slot。对局部变量表的写操作会导致局部变量表对过期引用的复用。

           

 

public static void main(String [] args)
{

     {
     byte[] placeholder=new byte[64*1024] ;
     }
      int a=0;//标注
      System.gc();
 }


去掉标注处,则placeholder占用的你存不会被回收,添加上则会被回收,局部变量表是GCroot的根,虽然placeholder已经离开作用域,但是对其的引用并未释放,标注一句使placeholder占用的空间被重复利用,使局部变量表释放了对placeholder的引用。

 

2.局部变量与全局变量初始化

全局变量有两次初始化过程,第一次是系统初始化在准备阶段赋值为系统初始值,第二次则是程序员初始化,而局部变量没有系统初始化阶段

编译错误
public class Test{

public static void main(String[] args){
   String a;
System.out.println(a);

}

}
输出null
public class Test{
static String a;
public static void main(String[] args){
  System.out.println(a);

}

}



 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值