java isub_Java中的静态函数内联

第一个代码:

public static int pitagoras(int a, int b)

{

return (int) Math.sqrt(a*a + b*b);

}

public static int distance(int x, int y, int x2, int y2)

{

return pitagoras(x - x2, y - y2);

}

经常调用距离.当我用javac编译它然后用javap -c反编译我得到了这个字节码:

public static int pitagoras(int, int);

Code:

0: iload_0

1: iload_0

2: imul

3: iload_1

4: iload_1

5: imul

6: iadd

7: i2d

8: invokestatic #24; //Method java/lang/Math.sqrt:(D)D

11: d2i

12: ireturn

public static int distance(int, int, int, int);

Code:

0: iload_0

1: iload_2

2: isub

3: iload_1

4: iload_3

5: isub

6: invokestatic #34; //Method pitagoras:(II)I

9: ireturn

似乎javac没有优化第二功能,距离.

我认为第二个代码更快:

public static int distance(int x, int y, int x2, int y2)

{

return (int) Math.sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2));

}

它的字节码:

public static int distance(int, int, int, int);

Code:

0: iload_0

1: iload_2

2: isub

3: iload_0

4: iload_2

5: isub

6: imul

7: iload_1

8: iload_3

9: isub

10: iload_1

11: iload_3

12: isub

13: imul

14: iadd

15: i2d

16: invokestatic #24; //Method java/lang/Math.sqrt:(D)D

19: d2i

20: ireturn

invokestatic是如此之快,以至于它与内联静态函数相同?为什么javac没有对此进行优化?或者它实际上是优化的,这两个代码会给出相同的,但我错过了一些东西?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值