javap命令简述

2019-08-12  本文已影响0人  转身一世铅华尽

一、javap命令简述

javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。

当然这些信息中,有些信息(如本地变量表、指令和代码行偏移量映射表、常量池中方法的参数名称等等)需要在使用javac编译成class文件时,指定参数才能输出,比如,你直接javac xx.java,就不会在生成对应的局部变量表等信息,如果你使用javac -g xx.java就可以生成所有相关信息了。如果你使用的eclipse,则默认情况下,eclipse在编译时会帮你生成局部变量表、指令和代码行偏移量映射表等信息的。

通过反编译生成的汇编代码,我们可以深入的了解java代码的工作机制。比如我们可以查看i++;这行代码实际运行时是先获取变量i的值,然后将这个值加1,最后再将加1后的值赋值给变量i。

通过局部变量表,我们可以查看局部变量的作用域范围、所在槽位等信息,甚至可以看到槽位复用等信息。

javap的用法格式:

javap <options> <classes>

其中classes就是你要反编译的class文件。

在命令行中直接输入javap或javap -help可以看到javap的options有如下选项:

-help --help -? 输出此用法消息 -version 版本信息,其实是当前javap所在jdk的版本信息,不是class在哪个jdk下生成的。

-v-verbose输出附加信息(包括行号、本地变量表,反汇编等详细信息)

-l输出行号和本地变量表

-public仅显示公共类和成员

-protected显示受保护的/公共类和成员

-package显示程序包/受保护的/公共类 和成员 (默认)

-p-private显示所有类和成员

-c对代码进行反汇编 -s输出内部类型签名

-sysinfo显示正在处理的类的系统信息 (路径, 大小, 日期,MD5散列)

-constants显示静态最终常量

-classpath 指定查找用户类文件的位置

-bootclasspath 覆盖引导类文件的位置

详细使用请见:王二北

https://www.jianshu.com/p/6a8997560b05

官方文档:

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

上一篇 下一篇

猜你喜欢

热点阅读