欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

了解下局部变量表槽位的复用

程序员文章站 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指的是所在槽位的索引。