为什么 Java 字节码方法中使用的局部变量数量不是最经济的?
我有一段简单的Java代码:
public static void main(String[] args) {
String testStr = "test";
String rst = testStr + 1 + "a" + "pig" + 2;
System.out.println(rst);
}
使用 Eclipse Java 编译器编译它,并使用 AsmTools 检查字节码。它显示:
该方法中有三个局部变量。该参数位于槽 0 中,槽 1 和 2 应该由代码使用。但我认为 2 个局部变量就足够了 — 索引 0 无论如何都是参数,代码只需要再多一个变量。
为了看看我的想法是否正确,我编辑了文本字节码,将局部变量的数量减少到2个,并调整了一些相关的说明:
我用AsmTools重新编译了它,它工作正常!
那么,为什么Javac或Eclipse编译器不进行这种优化来使用最小的局部变量呢?