gpt4 book ai didi

java - 短路评估的性能影响

转载 作者:行者123 更新时间:2023-11-30 08:36:08 24 4
gpt4 key购买 nike

免责声明:我在字节码逆向工程方面经验不多,所以如果可以“轻松”回答我的问题,请不要对我太苛刻。

在现代处理器上,如果预测失败,分支可能会非常昂贵(参见 Why is it faster to process a sorted array than an unsorted array?)。

假设我在 Java 中有一些这样的短路评估:

if (condition && (list!=null) && (list.size()>0)) /* Do something */ ;

这基本上相当于一堆这样的分支:

if (condition) {
if (list!=null) {
if (list.size()>0) {
// Do something
}
}
}

或者 Java 是否有其他方法可以更巧妙地进行短路?

换句话说,通过像这样重写这一行来避免至少一个分支是否更好:

if ((condition & (list!=null)) && (list.size()>0)) /* Do something */ ;

因为简单的 list!=null-check 比潜在的错误预测分支要便宜得多?

(很明显,如果不冒 NullPointerException 的风险,我无法摆脱第二个 &&。)

现在,在我被诸如“过早优化是万恶之源!”之类的陈述撕成碎片之前,请记住这是在一般编码习惯(始终使用短路与从不使用短路)之间做出选择-circuiting unless required),这将影响我的大部分所有代码,因此确保我在这里使用正确的习惯绝对值得花一些时间考虑。

最佳答案

here提到任何类型的分支。这只是一个表达式求值,if 语句中的 && 与表达式中的 && 没有区别。你会用下面的代码问同样的问题吗?

boolean isValid = condition && (list!=null) && (list.size()>0);
if (isValid) {
...
}

这基本上就是发生的事情,表达式被求值,然后分支发生。

关于java - 短路评估的性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37891180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com