Почему компилятор Java или JIT не оптимизируют повторные вызовы чистого метода с тем же входом?JAVA

Программисты JAVA общаются здесь
Anonymous
Почему компилятор Java или JIT не оптимизируют повторные вызовы чистого метода с тем же входом?

Сообщение Anonymous »

Я изучаю микро-оптимизации в Java для повышения производительности в реальной задаче обработки данных, где один и тот же чистый метод неоднократно называется в одном и том же объеме с использованием идентичных входов. деградация в масштабе. Моя цель - понять, почему компилятор Java или JIT не автоматически оптимизируют эти случаи. < /P>
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>
    Почему не устраняет общеизвестный подбол. Является ли многократно в пределах одной и той же области? />
Любое понимание этого поведения или планов на будущие улучшения в OpenJDK/JVM будет оценено.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ls-with-th

Вернуться в «JAVA»