ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> Java教程 >> JVM指令分析实例一(常量、局部变量、for循环)

JVM指令分析实例一(常量、局部变量、for循环)(1/3)

来源:网络整理     时间:2018-09-17     关键词:

本篇文章主要介绍了" JVM指令分析实例一(常量、局部变量、for循环)",主要涉及到方面的内容,对于Java教程感兴趣的同学可以参考一下: Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码以及跟随其后的零至多个代表此操作所需参数的操作数所构成。虚拟机中许多指令并不包含操作数,只有...

Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码以及跟随其后的零至多个代表此操作所需参数的操作数所构成。虚拟机中许多指令并不包含操作数,只有一个操作码。

Java虚拟机限制操作码的长度为1个字节,因此最多只能有256个指令。

指令格式

以下指令格式,是基于Oracle JDK编译后,通过javap工具生成的指令描述格式。

<index><opcode> [<operand1> [<operand2>...]] [<comment>]

<index>

指令操作码在方法字节码指令数组中的索引,也可以认为是相对于方法起始处的字节偏移量。其中,指令数组指方法对应的Code属性的code[]数组,该数组用于存放方法的字节码指令。

该索引可以作为控制转移指令的跳转目标。例如,goto 8指令表示跳转到索引为8的指令上继续执行。

<opcode>

指令的操作码助记符。例如,iconst_0、istore_1、iload_1和return等。

<operandN>

指令操作数,一条指令可以有0至多个操作数。例如,iconst_0没有操作数,bipush有1个操作数,iinc有2个操作数。

<comment>

指令行尾的注释。注释内容通常以//开始。

每一行中,表示运行时常量池索引的操作数前,会有一个井号。在指令后的注释中,会带有对这个操作数的描述,例如:

1: invokespecial #8// Method java/lang/Object."<init>":()V  10: ldc2_w        #19// double 100.0d

实例分析

以下实例均使用JDK 1.8编译,并使用javap生成字节码指令清单。

代码1

voidspin(){
    int i;
    for (i = 0; i < 100; i++) {
        ; // Loop body is empty    }
}

字节码指令序列

 JVM指令分析实例一(常量、局部变量、for循环)

相关图片

相关文章