# Local Variable Table
- 每一个方法(栈帧)执行时的内部变量
- 局部变量表是线程私有的
# 查看变量表
package com.mrzhang.javalearn.jvm.zz;
/**
* 局部变量表(一)
*
* @author 91MrZhang on 2020/8/12
*/
public class TestDemo2 {
public int calculate(int pama) {
int va = 6;
int vb = 8;
TestDemo1 td1 = new TestDemo1();
return pama + va + vb;
}
}
jclasslib查看一下calculate方法
- 因为方法不是静态的,所以将this对象当作默认第一参数(index 0),这样你就可以调用this.xxx,算上方法参数,一共5个参数
- startPC代表从jvm指令多少行起开始生效,length代表作用长度,可以看到方法一共21行,startPC和length相加都是21的
# slot 变量槽
局部变量表中,是以slot为单位存放的,32位的数据类型用一个slot(byte、short、char、boolean),64位(long、double)和引用型变量用两个slot
# slot变量槽复用
如果一个变量在方法体中不是全作用域,那么超出作用域之后,再有新变量,新变量用这个旧变量的slot,不再新申请
jvm字节码也不会把这个旧变量算作一个参数,这种情况在for循环中的i++常见,节省空间
/**
* 局部变量表(一)
*
* @author 91MrZhang on 2020/8/12
*/
public class TestDemo2 {
public int calculate(int pama) {
{
int i = 1;
System.out.println(i);
}
int j = 0;
return j;
}
}
