次のコードがあるとします。
public class MainClass {
public static int f(){
int i=0;
i++;
return i;
}
}
コンパイラ javac は次のコードを生成します。
Compiled from "MainClass.java"
public class latte_jvm.MainClass {
public static int f();
Code:
0: iconst_0
1: istore_0
2: iinc 0, 1
5: iload_0
6: ireturn
}
関数 f は非常に単純なことを行います。1 を返すだけです。非常に直接的に変換されているため、Java コンパイラが最適化をまったく行っているとは信じられません。Java コンパイラの作成者が、コンパイル段階でそのような最適化を行わないことにしたのはなぜですか?