我试图比较
请问这是为什么呢?
非常感谢!
pow(x,2.0)
和pow(x,2.0000001)
的性能,我认为2.0
会更快,但它们的速度相同。我甚至通过使用-Xint
参数运行jar文件来删除JIT优化。请问这是为什么呢?
非常感谢!
pow(x,2.0)
和pow(x,2.0000001)
的性能,我认为2.0
会更快,但它们的速度相同。我甚至通过使用-Xint
参数运行jar文件来删除JIT优化。Math.pow(x, 2.0)
的性能在JVM版本之间高度变化。Math.pow
使用软件实现,即仅调用__ieee754_pow函数在软件中模拟操作。它非常慢,但对于 y == 2 有特殊情况。
- 自JDK 7u40以来,Math.pow
成为JVM内置函数,由JIT翻译为FPU指令。然而,这种优化丢失了特殊情况,导致y == 2 的性能回归,参见bug JDK-8029302。
- 这个性能回归已在JDK 8u25和即将到来的7u80中得到修复。自JDK 8u25以来,Math.pow
对于所有值的工作速度都足够快,但对于y == 2来说极快。请参见相关问题。
P.S.在我的机器上,使用不同版本的JDK对100M个Math.pow
调用的大致时间(以秒为单位)。 Math.pow(x, 2.0) Math.pow(x, 2.0000001)
JDK 7u25 3.0 30.4
JDK 7u40 11.1 11.1
JDK 8u40 0.1 11.1
x * x
),你会得到更好的结果。 - Louis Wasserman