27-javap指令
2021-06-24 本文已影响0人
紫荆秋雪_文
一、解析字节码的意义
- javap是JDK自带的反解析工具。它的作用就是根据 Class 字节码文件,反解析出当前类对应的 code 区(字节码指令、局部变量表、异常表和代码行偏移量映射表、常量池等信息)
- 通过局部变量表,可以查看局部变量表的作用域范围、所在槽位等信息,甚至可以看到槽位复用等信息
二、javac -g 操作
- 解析字节码文件得到的信息中,有些信息(局部变量表、指令和diam行偏移量映射表、常量池中方法的参数名称等等)需要在使用 javac 编译成 class 文件时,指定参数才能输出
- 直接使用 javac xx.java 命令不会产生对应的局部变量表信息
- javac -g xx.java 就可以生成所有相关信息了
三、javap
- javap使用格式
javap <options> <classes>
- -help --help -?:输出此用法消息
- -version:版本信息,javap所在JDK的版本信息
- -public:仅显示公共类和成员
- -protected:显示受保护的/公共类和成员
- -p -private:显示所有类和成员
- -package:显示程序包/受保护的/公共类和成员(默认)
- -sysinfo:显示正在处理的类的系统信息(路径,大小,日期,MD5散列,源文件名)
- -constants:显示静态最终常量
- -s:输出内部类型签名
- -l:输出行号和本地变量表
- -c:对代码进行反汇编
- -v -verbose:输出附加信息(包括行号、本地变量表、反汇编等详细信息)