繁体   English   中英

Java运算符性能算法与按位运算

[英]Java operators performance arithmetic vs bitwise

在真正影响性能的重复算术运算中,按位运算符会对性能产生正面还是负面影响? 我尝试使用Google进行搜索,但无法获得确切的答案。

例如我应该使用这个:

int s = 15 << 4;

或这个:

int s = 15 * 16;

来提高我的应用程序的性能。

运算符优先级也与性能相关吗?

即使这些操作不是编译时常量表达式 (例如n << 4 ),虚拟机也会在JIT编译过程中选择更快的实现,因此您可以用最容易理解的任何一种方式编写。 性能将是相同的。

这是HotSpot JVM C2 JIT编译器的C ++代码 ,用左移将乘法替换为2的幂。 在下面一些地方,您可能会发现一些常量的更多优化方法(例如,用(n << 3) + (n << 2)代替n * 12 )。

在这种情况下,您可以使用其中任何一个。

两者都是编译时可评估的常量表达式,因此编译器将执行该操作。 因此,运行时完全不会受到影响。

如果您设计了一个仅在运行时可评估的示例,那么很难说,但是如果您是我,无论如何我都相信编译器。 始终对任务使用适当的运算符,以防止错误蔓延。您始终可以分析性能。

这段代码

public class A {
    public static void main(String[] args) {
        int a = 15 << 4;
        int b = 15 * 16;
    }
}

编译为

  public static void main(java.lang.String[]);
    Code:
       0: sipush        240
       3: istore_1
       4: sipush        240
       7: istore_2
       8: return

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM