X * x vs Math.pow(x, 2) java performance

Я провел некоторое тестирование относительно того, быстрее ли x * x или Math.pow(x, 2) в Java. Я ожидал, что просто x * x будет несколько быстрее, однако оказалось, что он примерно равен скорости. Может кто-нибудь просветить меня, как это возможно, пожалуйста?

Ответ 1

Все, что вы знаете, это JIT (или даже уже во время компиляции) до той же самой вещи. Эти микро-контрольные показатели редко дают очень полезные результаты, поскольку нет реального контекста.

Это определенно не является основанием для предпочтения одного над другим, поскольку код реального мира редко имеет простую операцию x^2 как точку доступа производительности.

Ответ 2

как это возможно, пожалуйста

Поскольку Math.pow является встроенным JVM, то есть JIT-компилятор строит вызов. Кроме того, когда он видит, что показатель является константой 2, он заменяет вызов ровно x*x.

Доказательство из источников HotSpot

Ответ 3

Внутренняя реализация Math.pow() делегируется на нативной функции, поэтому она может быть разумной для хорошей производительности. В любом случае, чтобы иметь достоверные результаты теста, вы должны проверить время в цикле, чтобы реалистично выполнить время выполнения.