深入了解java虚拟机(JVM) 第十章 字节码指令

时间:2021-10-18 17:08:28

一、字节码指令的含义

  Java字节码指令由一个字节长度的,代表某种特定操作含义的数字(操作码)以及其后的零至多个代表此操作所需参数(操作数)。此外字节码指令是面向操作数栈的,这里操作数栈在功能上对应实体机的寄存器但是结构上有所区别。

   字节码指令的作用简单的来说就是jvm将我们写好的代码翻译成字节码指令存入code中,然后被虚拟机执行引擎执行的。  

二、字节码指令的特点

  1.大多数指令是包含类型信息的,如:Iload、fload指令,前面的I和f代表int类型和float类型。

  2.也有一些不包含类型信息的指令,如goto

  3.类型多、指令少

三、字节码的类型介绍

  1.加载和存储指令

  加载和存储指令用于将数据在栈帧中的局部变量表和操作数栈之间来回传输。

  2.运算指令

  运算指令用于对两个操作数栈上的值进行某种特定的运算,并把结果存储到操作数栈顶。

  3.类型转换指令

  类型转换指令可以将两张不同的数组类型进行转换,这些转换操作一般用于实现用户代码中的显示类型转换操作,以及用来处理字节码指令集中数据类型相关指令无法与数据类型一一对应的问题。

  4.对象创建与访问指令

  创建类实例、数组或访问类和数的指令。

  5.操作数栈指令

  操作数栈指令用于直接操作操作数栈。

  6.控制转移指令(if else、switch 、for、while……)

  控制转移指令可以让java虚拟机有条件或无条件的从指定位置指令而不是控制转移指令的下一条指令继续执行程序,可以认为控制转移指令就是在修改PC寄存器的值。

  7.方法调用指令

  用于调用对象、接口中的方法指令

  8.异常处理指令

  在程序中显式抛出异常操作会由athrow指令实现try/catch代码块,但是在高版本JDK中,try/catch代码块不会影响程序的性能,这是因为catch的执行不再使用字节码指令,而是使用Exception table执行。

  9.同步指令

  类似与管程(synchronized代码块)的指令。

  想要了解详细的指令,可以参考:http://www.blogjava.net/DLevin/archive/2011/09/13/358497.html