共计 698 个字符,预计需要花费 2 分钟才能阅读完成。
对 JVM 底细有一些概念之后,咱们能够看一下从示例代码生成的一些根本的字节码示例。一个 Java 类文件中的每个办法都有一个由一系列指令组成的代码片段,每个指令都有如下的格局:
操作符(1 个字节)操作数 1(可选)操作数 2(可选)……
这是一条指令,由一个字节的操作符和零个或者多个操作数组成,操作数蕴含了要进行运算的数据。
在以后执行办法的栈帧中,一条指令能够在操作数栈上进行 push 或者 pop 操作,并且它可能在局部变量数组中加载或者保留数值。让咱们来看一下简略的例子:
为了打印出编译好的类中的字节码(假设它的文件名是 Test.class),咱们能够运行 javap 工具:
javap -v Test.class
咱们会失去如下的后果:
为了打印出编译好的类中的字节码(假设它的文件名是 Test.class),咱们能够运行 javap 工具:
javap -v Test.class
咱们会失去如下的后果:
istore_1: 最下面的操作数出栈(一个 int 值),并把它保留在序号为 1 的局部变量中,它对应于变量 a
iconst_2: 把整型常量 2 入栈。
istore_2: 最下面的 int 操作数出栈,并把它保留在序号为 2 的局部变量中,它对应于变量 b
iload_1: 从序号 1 的局部变量中加载 int 值,并把它压入栈顶。
iload_2: 从序号 2 的局部变量中加载 int 值,并把它压入栈顶
iadd: 从操作数栈中取出两个 int 值,求和,并把后果放回栈顶
istore_3: 从操作数栈顶取出 int 值,并把它保留在序号为 3 的局部变量中,也就是变量 c
return: 从 void 办法返回。
以上的每一个指令都仅由一个操作符组成,它指定了须要 JVM 执行的确切操作。