编译器会优化重复的数学计算吗?

卑鄙的

Java编译器会优化简单的重复数学运算,例如:

if (prevX / width != curX / width) {
    // Do something with prevX / width value
} else {
    // Do something with curX / width value
}

我知道我可以将结果分配给if语句之前的变量,然后返回变量,但这有点麻烦。如果编译器自动识别出正在执行相同的计算,并将结果自己缓存到临时变量中,我宁愿遵守上述约定。

*编辑-我是个白痴。我试图简单/过多地提出我的问题。它不是简单的:if(x> y)

神秘主义者:

答案是肯定的。这称为“ 公共子表达式消除”,它是Java,C / C ++和其他应用程序中使用的一种标准(且功能强大)的编译器优化。

该页面确认HotSpot JVM将进行此优化。


就是说,编译器/运行时是否能够在您期望时进行此优化是另一回事。因此,如果可以提高可读性,我通常更愿意自己进行这些优化。

double xw = x / width;
double yw = y / width;

if (xw > yw) {
    return xw;
} else {
    return yw;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章