if语句分支的性能测试



之间的性能是否存在差异

public int method()
{
    x = 1;
    if (x == 0)
       System.out.println("something");
    return 1;
}

public int method()
{
    x = 1;
    if (x == 0)
       System.out.println("something");
    else
       return 1;
    return 7; //this won't happen because x is 1
}

正如您所注意到的,我在第二个示例中使用了else。我不知道分支返回是否比正常返回快。

让我们看看jvm指令:

第一种方法一如果分支:

     public int ifmethod();
 0  aload_0 [this]
 1  iconst_1
 2  putfield ifperf.main.x : int [22]
 5  aload_0 [this]
 6  getfield ifperf.main.x : int [22]
 9  ifne 20
12  getstatic java.lang.System.out : java.io.PrintStream [24]
15  ldc <String "something"> [30]
17  invokevirtual java.io.PrintStream.println(java.lang.String) : void [32]
20  iconst_1
21  ireturn

其他分支的第二种方法:

public int ifelsemethod();
 0  aload_0 [this]
 1  iconst_1
 2  putfield ifperf.main.x : int [22]
 5  aload_0 [this]
 6  getfield ifperf.main.x : int [22]
 9  ifne 23
12  getstatic java.lang.System.out : java.io.PrintStream [24]
15  ldc <String "something"> [30]
17  invokevirtual java.io.PrintStream.println(java.lang.String) : void [32]
20  goto 25
23  iconst_1
24  ireturn
25  bipush 7
27  ireturn

正如你所看到的,在这种情况下,两种方法都是完全相同的。答案是在第9行,你有测试ifne("IF不等于转到XY行"),所以在一种情况下,你在第20行,在第二种情况下在第23行。然后执行完全相同的指令。

因此,在一种情况下,您将执行0-9->20,21,在另一种情况中,执行0-9->23,24

最新更新