I useJMH指定操作的复杂度。如果您从未与 JMH 合作过,请不要担心。 JMH 将刚刚推出estimateOperation
方法多次,然后得到平均时间。
问题:[缩小]这个程序会计算Math.cbrt(Integer.MAX_VALUE)
每一次?或者它只计算一次并返回缓存结果?
@GenerateMicroBenchmark
public void estimateOperation() {
calculate();
}
public int calculate() {
return Math.cbrt(Integer.MAX_VALUE);
}
问题:[广泛]:JVM 是否缓存过方法的结果?
方法的返回值永远不会cached。然而,不必要的调用可能会消除了由于某些原因,JIT编译器在运行时优化 like 不断折叠, 不断传播, 死代码消除, 循环不变提升, 方法内联 etc.
例如,如果您替换Math.cbrt
with Math.sqrt
或与Math.pow
,该方法在 JIT 编译后根本不会被调用,因为调用会被一个常量替代。 (优化不适用于cbrt
,因为它是一种罕见的方法,并且它属于未由 JVM 内在化的本机调用)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)