java底层字节码分析

javap 命令:

java底层字节码分析_第1张图片
用法: javap
其中, 可能的选项包括:
-help --help -? 输出此用法消息
-version 版本信息
-v -verbose 输出附加信息
-l 输出行号和本地变量表
-public 仅显示公共类和成员
-protected 显示受保护的/公共类和成员
-package 显示程序包/受保护的/公共类
和成员 (默认)
-p -private 显示所有类和成员
-c 对代码进行反汇编
-s 输出内部类型签名
-sysinfo 显示正在处理的类的
系统信息 (路径, 大小, 日期, MD5 散列)
-constants 显示最终常量
-classpath 指定查找用户类文件的位置
-cp 指定查找用户类文件的位置
-bootclasspath 覆盖引导类文件的位置

javap -c 对代码进行反汇编

javap -c Demo1.class > demo1:

将 Demo1.class 文件转为 txt 文件

Compiled from “Demo1.java”
public class main.java.com.andy.jvm.Demo1 {
public main.java.com.andy.jvm.Demo1();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."")V
4: return

public static void main(java.lang.String[]);
Code:
0: new #2 // class main/java/com/andy/jvm/Demo1
3: dup
4: invokespecial #3 // Method “”)V
7: astore_1
8: aload_1
9: invokevirtual #4 // Method math:()I
12: pop
13: return

public int math();
Code:
0: iconst_1 – 将 int 推送到 操作数栈
1: istore_1 – 将 操作数栈中的 int 推送到 局部变量表
2: iconst_2
3: istore_2
4: iload_1
5: iload_2
6: iadd
7: bipush 10
9: imul
10: istore_3
11: iload_3
12: ireturn
}

code下的助记符可以到一下网址查找

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html

你可能感兴趣的:(jvm)