Byr*_*ins 3 java compiler-construction optimization
我有一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器可以观察到对象初始化后哈希码不能改变,并将其预先计算到附加private final字段中.当前的Java编译器是否像Oracle JDK 7中那样执行此操作?我可以解散.class文件,但是JIT也可能在运行时进行这种优化,我不会在那里看到它.无论如何,我对除此之外的其他情况感兴趣,因此找到一种识别编译器自动执行的任何优化的通用方法会很棒.
当前的Java编译器是否像Oracle JDK 7中那样执行此操作?
这javac几乎没有任何优化.
我可以解散.class文件,
您可能不喜欢在优化方面看到的内容.;)
但是JIT也可能在运行时进行这种优化,我不会在那里看到它.
如果JIT确实对此进行了优化,那么你就不会看到它,事实上它并没有这样做.这就是为什么String在运行时缓存它的hashCode(),显式地在代码中.