gpt4 book ai didi

java - java中变量的内存分配

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

我有一个关于 java 如何处理未使用变量的问题。

假设我有以下代码:

int notUsedVariable = aMethodThatExecutesSomethingImportantAndReturnsInt(someParameter);

然后我从不在代码中使用 notUsedVariable。该变量是否会实际存储,或者 java 足够聪明以在编译时忽略该变量?

谢谢!

最佳答案

我的观察是 javac 可能会省略未使用变量的存储操作if:

  1. 变量被标记为final 并且在声明中被初始化;
  2. 使用局部变量调试信息 (-g:vars) 进行编译

如果您使用 -g:vars 进行编译,javac 将保持变量的加载和存储以用于调试目的。它似乎不认为非最终变量符合删除条件。

自己测试。我使用 JDK 7 的结果如下。结果与 JDK 8 EAP 相同。

输入:

class MyTest {
public static void main(String... args) {
int a = 1;
}
}

输出:

public static void main(java.lang.String... p0);
Flags: PUBLIC, STATIC, VARARGS
Code:
stack=1, locals=2, arguments=1
0: iconst_1
1: istore_1
2: return

输入:

class MyTest {
public static void main(String... args) {
final int a = 1;
}
}

输出:

public static void main(java.lang.String... p0);
Flags: PUBLIC, STATIC, VARARGS
Code:
stack=1, locals=2, arguments=1
0: return

正如其他人所说,无论哪种情况,我都希望 JIT 优化器忽略任何不必要的存储操作。

关于java - java中变量的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17198782/

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