《深入理解Java虚拟机》第六章-类文件结构
无关性 – 平台无关性
基石:各个平台统一的字节码+各个平台适配的虚拟机
其他语言也可用java虚拟机,只要编译为class即可
class类文件结构
数据类型:无符号数(u1, u2, u4, u8 – 1、2、4、8个字节) & 表 (_info)结尾
魔数与class文件版本
常量池
字面量和符号引用(类似编译原理)
注意没有C的链接步骤,字节码中无法得到内存布局
每个常量都是一个表
访问标志
类索引、父类缩影、接口索引集合
字段表集合
描述接口或者类声明的变量
作用域(public/private/protected)、实例变量类变量(static)、可否序列化、字段数据类型、字段名称
数组[
int[] – [I
描述方法
先参数后返回值
方法表集合
属性表集合
字节码指令简介
基本流程
do { PC寄存器+1 根据PC寄存器的值,从字节码流中取出操作码 if(字节码存在操作数) -> 从字节码流中取出操作数 执行操作码定义的操作 }while(字节码流长度>0)
字节码于数据类型
iload – int, fload – float,最开始为助记符
操作码只有一字节,所以操作码有限
加载存储指令
运算指令
类型转换指令
对象创建与访问指令
操作数栈管理指令
控制转移指令
方法调用与返回指令
异常处理指令
同步指令
公有设计,私有实现
class文件结构的发展