У меня есть Java-программа с интенсивным использованием HashMap, в которой несколько классов имеют хэш-коды, вычисляемые из конечных полей. Например:
Код: Выделить всё
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;
}
}
Компилятор может заметить, что хэш-код не может измениться после инициализации объекта, и предварительно вычислить его в дополнительное закрытое поле Final. Делают ли это современные компиляторы Java, например, в Oracle JDK 7? Я мог бы дизассемблировать файл .class, но тогда JIT также может выполнять такую оптимизацию во время выполнения, и я бы ее там не увидел. В любом случае, помимо этого, меня интересуют и другие случаи, поэтому было бы здорово найти общий подход для определения любых оптимизаций, которые компилятор выполняет автоматически.
Подробнее здесь:
https://stackoverflow.com/questions/190 ... nal-fields