Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 在下面的代码中会有任何性能差异吗?_Java_Performance - Fatal编程技术网

Java 在下面的代码中会有任何性能差异吗?

Java 在下面的代码中会有任何性能差异吗?,java,performance,Java,Performance,我想知道以下两个代码块是否存在性能差异 1> 及 2> 是的,在第二种情况下,只检查一个条件,在前一种情况下,必须检查两个条件 计算失败的if子句必须执行“指令跳转”,即使其后没有else语句 假设第一个if为false,您将比较以下两种执行场景: 1> Check 1st condition Skip to check 2nd condition Do "something" inside the 2nd condition 2> Check condition Skip to

我想知道以下两个代码块是否存在性能差异

1>

2>


是的,在第二种情况下,只检查一个条件,在前一种情况下,必须检查两个条件

计算失败的
if
子句必须执行“指令跳转”,即使其后没有
else
语句

假设第一个
if
为false,您将比较以下两种执行场景:

1>
Check 1st condition
Skip to check 2nd condition
Do "something" inside the 2nd condition

2>
Check condition
Skip to "something" inside the else

是的,在第二种情况下,只检查一个条件,在前一种情况下,必须检查两个条件

计算失败的
if
子句必须执行“指令跳转”,即使其后没有
else
语句

假设第一个
if
为false,您将比较以下两种执行场景:

1>
Check 1st condition
Skip to check 2nd condition
Do "something" inside the 2nd condition

2>
Check condition
Skip to "something" inside the else

第一个比较两次,第二个比较一次。差别不会很明显,但确实存在。

第一个比较两次,第二个比较一次。差异不会很明显,但确实存在。

是,因为两个
if
案例都将在第一个案例中评估,而只有一个
if
案例将在第二个案例中评估。

是,因为两个
if
案例都将在第一个案例中评估,而只有一个
if
案例将在第二个案例中评估。

是,会有一个区别:在第二个例子中,tehre只有一个陈述需要证明,在第一个例子中有两个


但是:性能上的差异将是绝对最小的,在99%的情况下,您甚至不会有任何差异-确保您的代码尽可能可读,这一点更为重要;)

是的,会有区别:在第二个例子中,tehre只有一个陈述需要证明,在第一个例子中有两个


但是:性能上的差异将是绝对最小的,在99%的情况下,您甚至不会有任何差异-确保您的代码尽可能可读,这一点更为重要;)

是的,显然第二个代码的性能要好得多,因为只有一个条件要检查是的,显然第二个代码的性能要好得多,因为只有一个条件要检查我相信编译器足够聪明,可以注意到第二个条件,如果在第一个示例中是冗余的,因此不会有任何性能变化

我相信编译器足够聪明,可以注意到第一个示例中的第二个if是冗余的,因此在100.000.000次迭代中对其进行基准测试后不会有任何性能变化

,第一次执行成本719ms,第二次执行成本703ms

我使用了一个模,所以条件必须每一次都改变,并避免预编译的结果。请在下面查找代码。我注意到,当迭代次数增加时,这个差距会减小

public static void main(String[] args) {
  Date start1 = new Date();

  for(int i=0; i<100000000; i++) {
    int it = i%2;
    if(it == 0) {
      double j = Math.random();
      j++;
    }
    if(it != 0) {
      double j = Math.random();
      j++;
    }   
  }

  Date end1 = new Date();
  Date start2 = new Date();    

  for(int i=0; i<10000000; i++) {
    int it = i%2;
    if(it == 0) {
      double j = Math.random();
      j++;
    } else {
      double j = Math.random();
      j++;
    } 
  }

  Date end2 = new Date();

  System.out.println((end1.getTime()-start1.getTime())+" / "+(end2.getTime()-start2.getTime()));
}
publicstaticvoidmain(字符串[]args){
日期开始1=新日期();

对于(int i=0;i在100.000.000次迭代中对其进行基准测试后,第一次执行成本719ms,第二次703ms

我使用了一个模,所以条件必须每一次都改变,并避免预编译的结果。请查找下面的代码。我注意到,当迭代次数增加时,这个差距会减小

public static void main(String[] args) {
  Date start1 = new Date();

  for(int i=0; i<100000000; i++) {
    int it = i%2;
    if(it == 0) {
      double j = Math.random();
      j++;
    }
    if(it != 0) {
      double j = Math.random();
      j++;
    }   
  }

  Date end1 = new Date();
  Date start2 = new Date();    

  for(int i=0; i<10000000; i++) {
    int it = i%2;
    if(it == 0) {
      double j = Math.random();
      j++;
    } else {
      double j = Math.random();
      j++;
    } 
  }

  Date end2 = new Date();

  System.out.println((end1.getTime()-start1.getTime())+" / "+(end2.getTime()-start2.getTime()));
}
publicstaticvoidmain(字符串[]args){
日期开始1=新日期();

对于(int i=0;i来说,只是一个简短的注释,说明编译器无法在所有情况下对其进行优化,因为
name
在第一个
if
块中可见,因此可以在其中修改它,因此必须在第二个
if
条件下再次检查它。想象一下这种情况:

if (name == null) {
    // Does something
    name = "Did it.";
}
if (name != null) {
   // Does something else
}
这显然不等于

if (name == null) {
    // Does something
    name = "Did it.";
} else {
   // Does something else
}

如果你的实际意思是你应该在一种情况下做一些事情,而在其他情况下做一些事情,请使用
If{…}else{…}
-而不仅仅是(最小值)性能提高,但也因为您的代码应该反映您的实际意思。

只是一个简短的注释,说明编译器无法在所有情况下对其进行优化,因为
name
在第一个
if
块中可见,因此它可能已在其中修改,因此必须在第二个
i块中再次检查它f
条件。想象一下这种情况:

if (name == null) {
    // Does something
    name = "Did it.";
}
if (name != null) {
   // Does something else
}
这显然不等于

if (name == null) {
    // Does something
    name = "Did it.";
} else {
   // Does something else
}

如果你的实际意思是你应该在一种情况下做一些事情,而在其他情况下做一些事情,请使用
If{…}else{…}
-而不仅仅是(最小值)性能提高,但也因为您的代码应该反映您的实际意思。

请注意,这两个片段不一定相等,因为第一个块可以重新分配
名称
,以便第二个条件也为真


这可能会引入难以发现的错误,因此我建议(在考虑性能之前),如果可能的话,考虑将变量
设置为final
,并在有意义时使用if/else(即,它应该只输入两个分支中的一个),并在有意义时链接if's(例如,当第一个if可以为下一个要使用的if建立默认值时)。

请注意,这两个片段不一定相等,因为第一个块可以重新分配
名称
,以便第二个条件也为真


这可能会引入难以发现的错误,因此我建议(在考虑性能之前),如果可能的话,考虑将变量
设置为final
,并在有意义时使用if/else(即,它应该只输入两个分支中的一个),并在有意义时链接if's(例如,当第一个if可以为下一个if建立默认值时)。

我想你的意思是相反的!我想你的意思是相反的!+1表示“the”