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); } }