局部变量表
简介:每一个栈帧都会有一个局部变量表,局部变量表里面存放着方法运行时需要的变量,其中非静态方法会多一个this变量,并且存放在索引为0的地方。其中局部变量表的大小在源码编译成为class文件的时候就已经被确定。局部变量表以变量槽(slot)为最小单位,在Java虚拟中中只有double和 long类型占两个槽位,其余都是一个。(还需要详细研究)
局部变量表中槽的重用: 槽的大小在百衲衣阶段已经确定,在一个方法中,并不是所有的变量的生命周期都覆盖了整个方法,当程序或者说字节码运行到一个地方,而这里已经超出了某个变量的作用域,那么这个变量的作用域可以被后面的其他变量所使用,由于重写的机制,也会有一些问题出现,比如在垃圾搜集当中,局部变量表结束生命周期的变量并不会立即被清除出变量表,而是等待槽位被重写才能消失,所以这就导致生命周期已经结束的对象就算使用手动的垃圾回收也不会被回收。