java学习笔记-初探字节码和命令执行效率

所谓的字节码,就是一段“虚拟机的机器指令”。Java虚拟机你可以把它当成一个模拟器运行的真实计算机,拥有自己的硬件结构和指令集,字节码给人的感觉就像是汇编语言代码一样的。


idea软件自带查看字节码的功能,我们可以随便打一段运算来看一下:


        int i=0;
        i=i+1;
        i+=1;
        i+=2;
        i++;

得到的字节码是


   L0
    LINENUMBER 6 L0
    ICONST_0
    ISTORE 1
   L1
    LINENUMBER 7 L1
    ILOAD 1
    ICONST_1
    IADD
    ISTORE 1
   L2
    LINENUMBER 8 L2
    IINC 1 1
   L3
    LINENUMBER 9 L3
    IINC 1 2
   L4
    LINENUMBER 10 L4
    IINC 1 1

需要说明的是,JVM是基于栈操作的,所以字节码指令大多是对操作数栈进行运算操作。详细字节码大家可以去网上搜,或者参考《深入理解JAVA虚拟机》这本书。


第一行:在栈顶存一个常量0,然后出栈将其存到变量表1的变量里(也就是i啦)


第二行:首先把变量表1的数据读到栈顶,再压一个常量1到栈顶,再将栈顶两个数弹出来进行加运算并将结果压回栈顶,再将栈顶弹出保存在变量表1中。


第三四五行:直接对变量表1中存放的数进行自增。


不难发现除了第一条加运算被翻译成了4条字节码之外,其他三条都只被简单翻译成一条字节码。(因为JVM的指令集支持直接对变量表进行操作,省去了使用操作数栈的麻烦)。


得出一个结论:i++;和i+=1;这两行代码的执行效率完全一样。个人不推荐为了执行效率在(复杂)运算式中使用++、--这样的运算符,因为这会极大的降低代码的可读性,导致他人工作上的麻烦(当然,如果你的目的就是为了增加别人读你代码的时间成本,而且自己在读自己代码的时候不存在任何障碍,那么你可以这么做)。


P.S.:除了idea自带的Show ByteCode工具之外,你也可以添加JClassLib这个插件,它的功能更强,可以显示常量池等一些其他内容,但我觉得字体有点小很难看清(或许是我没找对方法)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值