HashMap
いくつかのクラスがフィールドから計算されたハッシュコードを持つ集中型 Java プログラムがありfinal
ます。例えば:
public class Foo {
private final int bar;
private final String zot;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + bar;
result = prime * result + zot.hashCode();
return result;
}
}
コンパイラは、オブジェクトの初期化後にハッシュコードが変更できないことを確認し、それを追加private final
フィールドに事前計算することができます。Oracle JDK 7 のような現在の Java コンパイラはこれを行いますか? ファイルを逆アセンブルすることはでき.class
ますが、JIT は実行時にこの種の最適化も行う可能性があり、そこには表示されません。とにかく、これ以外のケースにも興味があるので、コンパイラが自動的に行う最適化を特定するための一般的なアプローチを見つけることは素晴らしいことです.