上QQ阅读APP看书,第一时间看更新
1.4.1 Java代码到字节码
Java代码编译成字节码由javac这个工具完成,编译后生成class文件。可以通过javap这个工具反编译字节码文件。反编译后整个文件很长,这里仅仅截取add函数和main函数相关代码片段对应的字节码。如下所示:
public class Example { // compiled from: Example.java // access flags 0x0add(II)I
L0 LINENUMBER 4 L0ILOAD 1
ILOAD 2
IADD
IRETURN
L1 LOCALVARIABLE this LExample; L0 L1 0 LOCALVARIABLE i I L0 L1 1 LOCALVARIABLE j I L0 L1 2MAXSTACK = 2
MAXLOCALS = 3
// access flags 0x9public static main([Ljava/lang/String;)V throws java/lang/Exception
L0 LINENUMBER 9 L0 NEW Example DUP INVOKESPECIAL Example.<init> ()V ASTORE 1 L1 LINENUMBER 11 L1 ALOAD 1 ICONST_1 ICONST_3 INVOKEVIRTUAL Example.add (II)I ISTORE 2 L2 LINENUMBER 13 L2 RETURN L3 LOCALVARIABLE args [Ljava/lang/String; L0 L3 0 LOCALVARIABLE obj LExample; L1 L3 1 LOCALVARIABLE result I L2 L3 2 MAXSTACK = 3 MAXLOCALS = 3 }
在这个字码片段中,add函数对应一共有4个字节码指令(ILOAD l、ILOAD 2、IADD、IRETURN),JVM在执行add函数时执行的就是这4个指令。