【问题标题】:Java primitive comparison performanceJava 原始比较性能
【发布时间】:2015-03-26 22:38:09
【问题描述】:

我正在比较 int a 和 int b。 if(a>=b){...}
if(a==b || a>b){...} 之间有性能差异吗?谢谢

【问题讨论】:

  • 如果有的话,后者可能会更慢,因为它有多个比较,而只有一个,尽管我认为引擎会优化那个位。你总是可以使用if (!a<b) {...}
  • 您的问题没有任何实际意义,因为 Java 代码优化器将为两者选择最佳表示。
  • 过早的优化只是浪费时间。
  • 这样的小东西开始出汗是一个滑坡。
  • 嗯,我实际上是先阅读 Javascript,然后它可能是个问题。在 Java 的情况下,你的代码实际上是在其中编译的,它肯定会自己优化它,因此它没有任何区别。

标签: java performance micro-optimization


【解决方案1】:

您始终可以查看字节码以了解较低级别发生的情况。这并不意味着所有编译器/选项都会这样做,但我想重要的是你正在使用的那个。此外,虽然它是一个较低的级别,但它不是最低级别。正如本网站上的elsewhere 所述,“Java 中的优化主要由 JIT 编译器在运行时完成”。所以最终你无法避免相信 Java 在这种情况下会为你做聪明的事情。

int foo(int a, int b) {
    if (a == b || a > b) return 1;
    return 0;
}

int bar(int a, int b) {
    if (a >= b) return 1;
    return 0;
}

在类文件上使用javap -c可以看到:

int foo(int, int);
Code:
   0: iload_1       
   1: iload_2       
   2: if_icmpeq     10
   5: iload_1       
   6: iload_2       
   7: if_icmple     12
  10: iconst_1      
  11: ireturn       
  12: iconst_0      
  13: ireturn       

int bar(int, int);
Code:
   0: iload_1       
   1: iload_2       
   2: if_icmplt     7
   5: iconst_1      
   6: ireturn       
   7: iconst_0      
   8: ireturn       

【讨论】:

    猜你喜欢
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2018-10-31
    • 2019-04-18
    • 2012-04-29
    相关资源
    最近更新 更多