Java的javap工具怎么使用(java,javap,编程语言)

时间:2024-05-06 01:38:01 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

    Java%E7%9A%84javap%E5%B7%A5%E5%85%B7%E6%80%8E%E4%B9%88%E4%BD%BF%E7%94%A8

一:简介

javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码。通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作。

javap命令的常用参数有:

-l 打印行和本地变量表

-public 只显示公共类和成员变量

-protected 只显示公共的、受保护的类和变量

-private 显示所有的类和成员变量

-p 显示所有的类和成员变量

-Joption 给jvm指定参数,例如:

javap -J-version

javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy

-s 打印内部类型签名(用于泛型)

-sysinfo 打印被处理类的系统信息(路径,大小,日志,MD5哈希)

-constants 显示static final常量

-c 输出分解后的代码。例如,类中每一个方法内,包含java字节码的指令

-verbose 输出栈大小,变量(locals)和方法参数的个数

-classpath path 指定查询类的路径.如果设置该值,则会覆盖默认值和CLASSPATH环境变量。

-bootclasspath path 指定启动类的路径,默认值是jre/lib/rt.jar 和 其他少数的jar.

-extdir dirs 覆盖 java.ext.dirs路径

二:实例

1.Java源代码

2.javac编译后的字节码

3.javap返汇编后的内容

javap -p -v Demo

默认情况下javap会打印所有非私有的字段和方法,当加了-p选项后,它还将打印私有的字段和方法;-v 它尽可能地打印所有信息。如果只需要查询方法对应的字节码,那么可以用-c代替-v.

以其中的sayHello()方法为例,除了方法描述以及访问权限之外,方法中还包括最为重要的代码区域。

1).代码区域一开始会声明该方法中的操作数栈(stack=3) 和局部变量数目(locals=1)的最大值,以及该方法接收参数的个数(args_size=1)这里局部变量指的是字节码中的局部变量,而非Java程序中的局部变量。

2).接下来是该方法的字节码,每条字节码均标注了对应的偏移量,这是用来定位字节码的。

3).接下来的行数表(LineNumberTable)则是Java源程序到字节码偏移量的映射。行数表和局部变量均属于调试信息,Java虚拟机并不要求class文件必备这些信息。

本文:Java的javap工具怎么使用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Springboot项目出现java.lang.ArrayStoreException异常怎么办下一篇:

3 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18