Java编译器是否应用了一些转换来优化方法调用?或者它是否总是通过简单的优化(例如删除死代码)生成对源的忠实表示?
具体来说,如果我们有以下示例:
public static void main(String[] args) {
System.out.println(foo());
System.out.println(foo());
System.out.println(foo());
System.out.println(bar());
System.out.println(bar());
System.out.println(bar());
}
public static int foo() {
int[] arr = {1, 2, 3, 4};
return arr[0];
}
public static int bar() {
return 10;
}
编译器是否尝试通过调用打印整数bar
来替换对foo
(甚至可能10
)的调用?
public static void main(String[] args) {
System.out.println(1);
System.out.println(1);
System.out.println(1);
System.out.println(10);
System.out.println(10);
System.out.println(10);
}
我知道一种名为内联的方法可以导致这种转换,但我想知道Java编译器(至少是Oracle JDK的javac
)是否适用它,或者如果它总是推迟到JVM。
答案 0 :(得分:1)