public class PureCallTest {
public static int compute(int x) {
return (x * x + 42) / 7; // pure function, no side effects
}
public static void main(String[] args) {
int a = compute(100);
int b = compute(100); // Repeated identical call
System.out.println(a + ", " + b);
}
}
< /code>
Ожидаемое: Второй вызов может повторно использовать результат первого.
Actual: Профилирование показывает, что он перечисляется, если только явно кэшируется: < /p>
int temp = compute(100);
int a = temp;
int b = temp;
< /code>
Что я попробовал и наблюдал < /strong> < /p>
- Пробовал запустить с JMH для микробанкеркинга и используемой системы.nanotime () для грубых проверок. Оптимизация горячей точки включена (-xx:+printcompilation, -xx:+tieredcompilation), JVM не устраняет избыточный вызов. /> verbose < /li>
Трудно поддерживать < /li>
Контрпродуктивный для чистого, читаемого кода. < /li>
< /ul>
Вопрос < /strong>
Почему не устраняет общеизвестный подбол. Является ли многократно в пределах одной и той же области? />
Подробнее здесь: https://stackoverflow.com/questions/797 ... ls-with-th