Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果带有OR和vs多个If_Java_Performance - Fatal编程技术网

Java 如果带有OR和vs多个If

Java 如果带有OR和vs多个If,java,performance,Java,Performance,一般来说,我们更喜欢使用 if(a==b || c==d) 在我们的代码中。我已经到了一种情况,我需要向用户提供一些关于到底出了什么问题的详细信息。所以我把这个打破了 if(a!=b) { doX(); } if(c!=d) { doY(); } 从java的角度来看,这种更改对性能有什么影响 这取决于编译器和优化器,但是,第一种选择可能要好得多: (a == b) || (c == d) 可以作为一个整数算术公式执行false==0,t

一般来说,我们更喜欢使用

if(a==b || c==d) 
在我们的代码中。我已经到了一种情况,我需要向用户提供一些关于到底出了什么问题的详细信息。所以我把这个打破了

 if(a!=b) {
    doX();
    } 
    if(c!=d) {
    doY();
    }
从java的角度来看,这种更改对性能有什么影响

这取决于编译器和优化器,但是,第一种选择可能要好得多:

  (a == b) || (c == d) 
可以作为一个整数算术公式执行false==0,true!=0

然后检查结果是否大于0。因此,只有一个条件检查和一个潜在的分支预测失败需要付出代价。要使编译器这样做,请将代码重新写入

   if ((a == b) | (c == d)) { // Note | instead of ||
     ...
   }
在第二段中

  if (a != b) {
    if (c != d) {
      ...
    }
  }
有两个条件检查和两个潜在的分支预测失败。 不同CPU的数据如下所示:

  comparison = 1/3..1 ticks
  addition   = 1/3..1 ticks
  if         = 1..20  ticks (20 if prediction appeared to be wrong) 

在任何情况下,增益都是象征性的,除非您必须在深循环中执行代码,否则您可能更喜欢用C语言重写并积极优化例程,您可以使用任意一个片段。

您对它们进行了什么测量?我想你的f应该是else-if,你通常会在后面有一个else子句和普通代码?您是否有任何证据表明这一微不足道的变化导致了问题?它是在一段特别频繁的代码中调用的吗?例如在一段紧密循环的代码中?主要的区别是,c和d将被计算,而它们可能不是第一种形式。除此之外,不会有可测量的影响。这似乎是一个明智的问题,但事实并非如此。如果你对性能很认真,那你找错地方了。没有应用程序通过优化if块来提高性能。他们通过多线程、连接池或缓存等方式获得它。。i、 e.具有整体影响的重大步骤。
  comparison = 1/3..1 ticks
  addition   = 1/3..1 ticks
  if         = 1..20  ticks (20 if prediction appeared to be wrong)