Java javap 命令:解析字节码的利器
javap 是 JDK 自带的字节码分析工具,用于将 .class 文件反编译为人类可读的字节码指令、常量池、类结构等信息。它是理解 Java 代码底层实现、排查性能问题、学习 JVM 工作原理的重要工具。本文将详细介绍 javap 的用法、常用选项及输出内容解析。
javap 基本用法
语法格式
1 | javap [选项] <class文件或类名> |
<class文件或类名>:可以是.class文件路径(如Test.class),或类的全限定名(如com.example.Test,需确保类在类路径下)。
常用选项
javap 提供多个选项,用于控制输出内容的详细程度,核心选项如下:
| 选项 | 作用描述 |
|---|---|
-v 或 -verbose |
输出最详细信息,包括常量池、字节码指令、行号表、局部变量表等。 |
-c |
对方法进行反汇编,输出字节码指令(最常用选项)。 |
-l |
输出行号表和局部变量表(配合 -c 或 -v 使用)。 |
-p 或 -private |
显示所有类成员(包括 private 修饰的方法和字段,默认只显示 public/protected)。 |
-constants |
输出常量池中的常量(如字符串、整数等)。 |
-sysinfo |
显示类文件的系统信息(路径、大小、修改时间、MD5 哈希)。 |
javap 输出内容解析
以示例类 TestString.class 为例,使用 javap -v TestString.class 输出的内容可分为以下几个核心部分:
类基本信息
输出开头显示类的版本、访问标志等基础信息: