javap 是 jdk 自带的一个工具,可以反编译 class 文件,是我们在做 java 代码性能分析时必不可少的一个工具。
我们先写个简单的代码,然后我们在逐个分析 javap 解析出来的内容。
public class TestJavap {
public static int add(int a, int b) {
int r = a + b;
return r;
}
public static void main(String[] args) {
int r = add(15, 16);
System.out.println(r);
}
}
执行 javap -v TestJavap 之后获得的内容如下:
D:\workspace\test_java\bin>javap -v TestJavap.class
Classfile /D:/workspace/test_java/bin/TestJavap.class
Last modified 2013-12-31; size 643 bytes
MD5 checksum 03f49f751716ceb852c190bfb54cbb2f
Compiled from "TestJavap.java"
public class TestJavap
SourceFile: "TestJavap.java"
minor version: 0
major version: 50
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Class #2 // TestJavap
#2 = Utf8 TestJavap
#3 = Class #4 // java/lang/Object
#4 = Utf8 java/lang/Object
#5 = Utf8 <init>
#6 = Utf8 ()V
#7 = Utf8 Code
#8 = Methodref #3.#9 // java/lang/Object."<init>":()V
#9 = NameAndType #5:#6 // "<init>":()V
#10 = Utf8 LineNumberTable
#11 = Utf8 LocalVariableTable
#12 = Utf8 this
#13 = Utf8 LTestJavap;
#14 = Utf8 add
#15 = Utf8 (II)I
#16 = Utf8 a
#17 = Utf8 I
#18 = Utf8 b
#19 = Utf8 r
#20 = Utf8 main
#21 = Utf8 ([Ljava/la