尽管投票不公平,但这个问题还是有道理的,因为它揭示了真正的JVM错误。
当您运行Oracle JDK时
Math.pow(x, 2.0),JVM版本之间的性能差异很大。
- 在JDK 7u40
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则非常快。请参阅相关问题。
PS
Math.pow用不同版本的JDK在我的计算机上100M调用的大概时间(以秒为单位)。
Math.pow(x, 2.0) Math.pow(x, 2.0000001)JDK 7u25 3.0 30.4JDK 7u4011.1 11.1JDK 8u40 0.1 11.1



