Java增加还是减少?绩效评估

时间:2016-01-19 11:26:36

标签: java performance increment

JAVA中是否存在i++;i--;

之间的性能差异

我无法为此评估字节码,我认为由于依赖于特定的算法,简单的基准测试不可靠。

2 个答案:

答案 0 :(得分:1)

  

我无法评估字节码

除了我链接的副本外,还有一些在询问与绩效相关的问题时需要考虑的一般事项:

给出以下示例代码(System.err.println基本上是必需的,以便编译器不会优化掉未使用的变量):

public class IncDec {
   public static void main(String[] args) {
        int i = 5;

        i++;
        System.err.println(i);
        i--;
        System.err.println(i);
    }
}

反汇编代码:

> javap -c IncDec
Compiled from "IncDec.java"
public class IncDec {
  public IncDec();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: iconst_5
       1: istore_1                          // int i = 5

       2: iinc          1, 1                // i++

       5: getstatic     #16                 // Field java/lang/System.err:Ljava/io/PrintStream;
       8: iload_1
       9: invokevirtual #22                 // Method java/io/PrintStream.println:(I)V

      12: iinc          1, -1               // i--

      15: getstatic     #16                 // Field java/lang/System.err:Ljava/io/PrintStream;
      18: iload_1
      19: invokevirtual #22                 // Method java/io/PrintStream.println:(I)V

      22: return
}

所以,不,在字节码级别的这种特殊情况下没有性能差异 - 两个语句都被编译为相同的字节码指令。

JIT编译器可以自由地进行任何其他优化。

答案 1 :(得分:0)

在Java中,两者之间的速度没有差别。在最基本的层面上,减法只是添加。也就是说,取2的补码并加上它。