我有一个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
字段中。当前的 Java 编译器是否执行此操作,例如 Oracle JDK 7 中的编译器?我可以分解.class
文件,但 JIT 也可能在运行时进行这种优化,我不会在那里看到它。无论如何,我对除此之外的其他情况感兴趣,因此找到一种通用方法来识别编译器自动执行的任何优化会很棒。