代码:
public class Test {
public int test(int i) {
return i+1;
}
}
用 Notepad++ 的Hex-Editor 插件打开 Test.class 文件
下图是我手工标记的 Test.class 文件的结构
理论依据来自上一篇文章《Class 文件的结构》
JDK 的 bin 目录中的工具 javap,是 Java class文件分解器,可以反编译,也可以查看 java 编译器生成的字节码等。
javap -help
用法: javap <options> <classes>
其中, 可能的选项包括:
-help --help -? 输出此用法消息
-version 版本信息
-v -verbose 输出附加信息
-l 输出行号和本地变量表
-public 仅显示公共类和成员
-protected 显示受保护的/公共类和成员
-package 显示程序包/受保护的/公共类
和成员 (默认)
-p -private 显示所有类和成员
-c 对代码进行反汇编
-s 输出内部类型签名
-sysinfo 显示正在处理的类的
系统信息 (路径, 大小, 日期, MD5 散列)
-constants 显示静态最终常量
-classpath <path> 指定查找用户类文件的位置
-bootclasspath <path> 覆盖引导类文件的位置
使用下面命令查看 Test.class 里的字节码
javap -verbose Test.class
通过上图可以验证手工标记的字节码信息基本正确。
【Java学习资源】整理推荐
- MAT 分析堆内存快照
- jclasslib 查看类信息
- 增大 MAT 堆内存
- JVM 常用配置参数(Java 8)
- 40 道JVM面试题解答
- JVM 问题排查常用指令
- jvisualvm 远程连接服务器 JVM
- 字节码指令分类
- -verbose:gc 和 -XX:+PrintGC 的区别
- JVM字节码指令表
- 图解 Class 文件结构
- Class 文件的结构
- JVM 故障处理工具列表
- HotSpot 内存分配的主要规则
- 开启 GC 日志
- 垃圾收集器及特点
- JVM垃圾回收算法
- 什么样的 Java 对象会被当垃圾回收?
- 内存溢出复现
- HotSpot VM 中对象的内存分析
- JVM 控制的内存区域
- JVM家族
- Java 的发展史
- 常见 JVM dump 指令
【Java面试题与答案】整理推荐