Java虚拟机--字节码(二十一)
2017-06-09 23:01
183 查看
目录:字节码与虚拟机的关系,相当于汇编语言与计算机的关系。当Java源码被编译成Class文件后,虚拟机会将Class文件内的方法字节码载入系统并加以执行;
代码如何执行?
Java字节码在虚拟机中,属于基本执行指令,每个Java字节码指令是一个byte数字,并且有一个对应的助记符
一个方法的java字节码指令,被编译到Java方法的Code属性中,如果想要查看指令的具体内容,可使用JDK自带的javap工具,javap常用参数如下:
示例:演示javap的使用
下面来分析红框内,也就是calc()方法的主体内容,看看它的执行过程:
代码如何执行?
Java字节码在虚拟机中,属于基本执行指令,每个Java字节码指令是一个byte数字,并且有一个对应的助记符
目前所有的字节码指令大约有200余个,比如下面这些: |
示例:演示javap的使用
|
| ||||||||||||||||||||||
在执行第一条指令的时候,局部变量表第0项为this引用,表示当前对象。对于所有的非静态函数调用,为了能顺利访问this对象,都会将对象的引用放置在局部变量表第0个槽位。指令sipush的作用是将给定的参数压入操作数栈,故执行完sipush500后,操作数栈中含有数字500。 在虚拟机的指令集,还有一条指令为bipush,也是完成相同的功能,但是bipush仅接收一个字节作为其参数,因此,它只能处理-128~127的数字范围,这里的500已经超过了bipush的处理范围,故使用sipush,它可以支持-32768~32767。虚拟机通过这种细分的指令集,可以尽可能减少指令所占的空间,毕竟sipush要比bipush多占一个字节。 | ||||||||||||||||||||||
|
相关文章推荐
- Java虚拟机--字节码(二十一)
- Java虚拟机--字节码(二十一)
- Java虚拟机--字节码(二十一)
- Java虚拟机--字节码(二十一)
- Java虚拟机--字节码(二十一)
- Java虚拟机--字节码(二十一)
- Java虚拟机--字节码(二十一)
- Java虚拟机--字节码(二十一)
- Java虚拟机--字节码(二十一)
- Java虚拟机--字节码(二十一)
- Java虚拟机--字节码(二十一)
- Java虚拟机--字节码(二十一)
- Java虚拟机--字节码(二十一)
- Java虚拟机--字节码(二十一)
- 【温故知新-Java虚拟机篇】5.字节码执行引擎
- Java虚拟机内存区域分布和字节码简析
- [深入理解Java虚拟机]第八章 字节码执行引擎-运行时栈帧结构
- [深入理解Java虚拟机]第九章 字节码执行引擎-类加载及执行子系统的案例与实战
- [四] java虚拟机JVM编译器编译代码简介 字节码指令实例 代码到底编译成了什么形式
- [深入理解Java虚拟机]第八章 字节码执行引擎-方法调用