java学习笔记-初探字节码和命令执行效率
来源:互联网 发布:在线c语言编程器 编辑:程序博客网 时间:2024/06/07 11:09
所谓的字节码,就是一段“虚拟机的机器指令”。Java虚拟机你可以把它当成一个模拟器运行的真实计算机,拥有自己的硬件结构和指令集,字节码给人的感觉就像是汇编语言代码一样的。
idea软件自带查看字节码的功能,我们可以随便打一段运算来看一下:
得到的字节码是
需要说明的是,JVM是基于栈操作的,所以字节码指令大多是对操作数栈进行运算操作。详细字节码大家可以去网上搜,或者参考《深入理解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
- java学习笔记-初探字节码和命令执行效率
- Java虚拟机学习笔记(字节码执行引擎)
- java学习笔记:字节码
- 《深入理解java虚拟机》学习笔记——虚拟机字节码执行
- 《深入理解java虚拟机》学习笔记之虚拟机字节码执行引擎
- 《深入理解java虚拟机》学习笔记(5)--虚拟机字节码执行引擎
- java字节码执行
- Java字节码执行方式--解释执行和JIT
- JVM学习笔记六 :虚拟机字节码执行引擎
- JVM学习笔记(7)-字节码执行引擎
- 字节对齐提高执行效率
- Java字节码---解释执行
- JAVA 虚拟机字节码执行
- JAVA 虚拟机类加载机制和字节码执行引擎
- Java 字符流和字节流-学习笔记
- Java IO学习笔记之字节流和字符流
- C++/JAVA/C#运行机制和执行效率
- Linux命令-后台执行命令学习笔记
- wx.toast 页面跳转延时的问题
- TCP/IP 小结
- 打开谷歌浏览器(chrome)线程lsass.exe的cpu占用高的解决办法
- <s:iterator>和<s:if>结合使用
- 【BzoJ 3319】【黑白树】【并查集】【”猥琐欲为“】
- java学习笔记-初探字节码和命令执行效率
- 挂载光盘
- Android之控件阴影模糊效果死磕Paint.setShadowLayer()
- 网站站外优化策略
- 面试 社招 程序员发展之路
- Java学习笔记(13)--面向对象的封装性
- java核心技术卷 之工具栏
- (4)学习SpringBoot之整合 Mybatis+PageHelper分页
- Nifi Docker集群-两个节点(2)