gpt4 book ai didi

java - java字节码中方法中的局部变量是如何计数的

转载 作者:行者123 更新时间:2023-12-01 14:23:23 25 4
gpt4 key购买 nike

我最近一直在学习java字节码,并且我已经了解了其中的大部分内容,但是我对例如局部变量计数是如何计数的感到困惑。我以为这只是局部变量的总和,但是这段代码在查看字节码时生成了 1 个局部变量

public int testFail()
{
return 1;
}

但我认为局部变量应该为零,因为没有定义局部变量。

此外,此方法还生成一个局部变量,但它比上一个示例具有更多的局部变量。

最后这个方法

public static int testFail(int a, int b)
{
return a+b;
}

在字节码中生成两个局部变量。

public static int testFail(int a)
{
return a;
}

最佳答案

非静态方法使用 this 的局部变量槽。另一个复杂之处是 longdouble 各算作 2。此外,根据您的编译器和设置,您可能看不到源代码中的局部变量与字节代码中的局部变量之间的一对一映射。例如,如果省略调试信息,编译器可能会消除不必要的局部变量。

编辑:

我刚刚想起来:编译器也可以重用局部变量槽。例如,给定以下代码:

public static void test() {
for(int i = 0; i < 100; i++) {
...
}
for(int j = 0; j < 100; j++) {
}
}

同一个槽可用于 ij,因为它们的范围不重叠。

关于java - java字节码中方法中的局部变量是如何计数的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17365295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com