字节码与执行引擎
核心概念
Class 文件结构
整体结构
ClassFile {
u4 magic; // 魔数:0xCAFEBABE
u2 minor_version; // 次版本号
u2 major_version; // 主版本号(52=JDK 8, 61=JDK 17)
u2 constant_pool_count; // 常量池大小
cp_info constant_pool[]; // 常量池
u2 access_flags; // 访问标志
u2 this_class; // 类索引
u2 super_class; // 父类索引
u2 interfaces_count; // 接口数量
u2 interfaces[]; // 接口索引
u2 fields_count; // 字段数量
field_info fields[]; // 字段表
u2 methods_count; // 方法数量
method_info methods[]; // 方法表
u2 attributes_count; // 属性数量
attribute_info attributes[]; // 属性表
}常量池
查看字节码
字节码指令
操作数栈与局部变量表
常用指令分类
加载和存储指令
算术指令
方法调用指令
实例分析
i++ 与 ++i 的字节码区别
执行引擎
解释执行
JIT 编译(Just-In-Time)⭐⭐⭐⭐
热点代码检测
编译器类型
编译器
特点
编译速度
代码质量
分层编译(Tiered Compilation)
JIT 优化技术
1. 方法内联(Inlining)
2. 逃逸分析(Escape Analysis)⭐⭐⭐⭐
方法调用
静态分派(编译期确定)
动态分派(运行期确定)
虚方法表(vtable)
面试要点
高频问题
常见陷阱
参考资料
Last updated