if-condtions的顺序是否会影响性能?

Man*_*nns 2 java performance

"if-conditions"的顺序是否会影响性能?

在假设顺序重要的情况下,这段代码if (slowMethod() && fastMethod())会慢于if (fastMethod() && slowMethod()).

我假设顺序很重要,因为编译器不分析条件的执行时间.但我不确定.

ass*_*ias 5

这两个条件将按此顺序进行评估,但第二个条件只会在第一个条件为真的情况下进行评估 - 所以乍一看,放在fastMethod第一个条件似乎更好.

但是从性能的角度来看,顺序也应该考虑每个表达式的概率:虽然fastMethod速度更快,但如果几乎总是如此并且slowMethod几乎总是假的,那么您可能需要先测试slowMethod.

例如,假设:

  • fastMethod 需要1 ms,80%的时间返回true
  • slowMethod 需要3毫秒,10%的时间返回true

然后:

  • fastMethod && slowMethod 平均需要3.4毫秒(20%的时间为1毫秒,80%的时间为4毫秒)
  • slowMethod && fastMethod 将平均需要3.1毫秒(3%90%的时间,4毫秒10%的时间)

最后,JIT编译器和CPU非常擅长优化条件,有时会导致违反直觉的性能结果.只有通过对特定用例进行基准测试/分析才能获得对问题的明确答案.