我有一个关于java如何处理未使用的变量的问题.
假设我有以下代码:
int notUsedVariable = aMethodThatExecutesSomethingImportantAndReturnsInt(someParameter);
Run Code Online (Sandbox Code Playgroud)
然后我从不在代码中使用notUsedVariable.实际上是否会存储该变量,或者java是否足够智能以在编译时忽略该变量?
谢谢!
我的观察是,如果出现以下情况,javac可能会省略未使用变量的存储操作:
final 并在声明中初始化;-g:vars)如果你编译-g:vars,javac会保持变量加载和存储以便进行调试.它似乎不认为非最终变量有资格被删除.
为自己测试.我在JDK 7的结果如下.结果与JDK 8 EAP相同.
输入:
class MyTest {
public static void main(String... args) {
int a = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
输入:
class MyTest {
public static void main(String... args) {
final int a = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
public static void main(java.lang.String... p0);
Flags: PUBLIC, STATIC, VARARGS
Code:
stack=1, locals=2, arguments=1
0: return
Run Code Online (Sandbox Code Playgroud)
正如其他人所说,在任何一种情况下,我都希望JIT优化器省略任何不必要的存储操作.