Java运算符性能算术与按位

时间:2016-01-08 08:10:16

标签: java performance operators

在性能真正重要的重复算术运算中,按位运算符会对性能产生正面或负面影响吗?我尝试过谷歌,但无法得到明确的答案。

例如,我应该使用它:

int s = 15 << 4;

或者这个:

int s = 15 * 16;

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

operator precedence也与效果相关吗?

3 个答案:

答案 0 :(得分:5)

即使这些操作不是compile-time constant expressions(例如n << 4),虚拟机也会在JIT编译期间选择更快的实现,因此您可以用任何一种最易读的方式编写。表现将是相同的。

这里是HotSpot JVM C2 JIT编译器的the C++ code,它将乘法替换为左移的幂数为2。稍微低一点,你可以找到一些常量的更多优化(比如用n * 12替换(n << 3) + (n << 2))。

答案 1 :(得分:4)

在这种情况下,你可以使用。

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

如果你设计了一个只能在运行时评估的例子,那么就更难说了,但如果我是你,我会信任编译器。始终使用适当的操作符来完成任务,这样就不会出现错误。您可以随时分析性能。

答案 2 :(得分:2)

此代码

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