javap
javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。
当然这些信息中,有些信息(如本地变量表、指令和代码行偏移量映射表、常量池中方法的参数名称等等)需要在使用javac编译成class文件时,指定参数才能输出,比如,你直接javac xx.java,就不会在生成对应的局部变量表等信息,如果你使用javac -g xx.java就可以生成所有相关信息了。如果你使用的eclipse,则默认情况下,eclipse在编译时会帮你生成局部变量表、指令和代码行偏移量映射表等信息的。
通过反编译生成的汇编代码,我们可以深入的了解java代码的工作机制。比如我们可以查看i++;这行代码实际运行时是先获取变量i的值,然后将这个值加1,最后再将加1后的值赋值给变量i(非原子性操作)。
Eclipse配置javap
1、菜单栏 Run ======> External Tools ==========> External Tools Configurations
2、Program右键 ====> New Configuration
3、在配置框中输入以下内容:
- Name:
javap
- Location:
C:\Program Files\Java\jdk1.8.0_171\bin\javap.exe
- Working Directory:
${workspace_loc}/${project_name}
- Arguments:
-classpath bin -c ${java_type_name}
如图:
测试i++的汇编代码:
如图,点击红色框选中的按钮,即可在Console中显示当前鼠标所在的.java文件的汇编代码: