了解下局部变量表槽位的复用
程序员文章站
2022-05-12 14:02:11
...
测试代码如下:
public class VarTest {
private void get() {
String a = "a";
System.out.println(a);
String b = "b";
}
private void get1() {
{
String a = "a";
System.out.println(a);
}
String b = "b";
}
}
如上代码,有两个方法get()和get1()。
编译下,然后通过jclasslib工具查看下以上类的函数的局部变量信息。
get()方法的局部变量信息如下:
可以发现get()方法的局部变量有3个,而且index也是不同的索引下标,说明处在不同的槽位。
get1()方法的局部变量信息如下:
可以发现get1()方法的局部变量有2个,同时局部变量的a和b的index是相同的,说明了a和b用的是同一个槽位,而一个槽位怎么可能放两个变量,所以肯定有个变量失效了,然后另一个变量才能够做到复用失效变量的槽位,这里就是局部变量a超出了作用域,失效了,然后局部变量b就复用了a的槽位,所以二者的index才会相同,这样就达到了节省资源的目的了。
PS:这里的index指的是所在槽位的索引。
推荐阅读