Java虚拟机--字节码(二十一)
2017-06-09 23:01
218 查看
目录:字节码与虚拟机的关系,相当于汇编语言与计算机的关系。当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虚拟机--字节码执行引擎
- [深入理解Java虚拟机]第八章 字节码执行引擎-方法调用
- [深入理解Java虚拟机]第八章 字节码执行引擎-基于栈的字节码解释执行引擎
- Java虚拟机字节码指令
- Java虚拟机----自定义类加载器:实现对字节码的加密解密
- Java虚拟机学习笔记(字节码执行引擎)