文件结构
以8字节为一个单元
.Class测试类
public class TestClass {
private int m;
public int inc(){
return m+1;
}
}

1.魔数
2.class版本
3.常量池
存放字面量与符号引用。
字面量(更接近JAVA层面):例如字符串常量、声明final的常量值
符号引用:类和接口的全限定名、字段的名称和描述符、方法的名称和描述符。
当虚拟机运行时,需要从常量池中获得对应符号的引用,在类创建时或运行时解析,翻译到具体的内存地址中。
即Class文件中不保存各个方法、字段最终的内存布局。
在常量池中,前两个字节代表常量池容量CP_NUM,一共有CP_NUM个CP_INFO
**CP_INFO
u1代表1字节,u2代表2字节


4.访问标志

5.索引
类索引
u2(2个字节)用来确定这个类的全限定名,指向某块CP_INFO
父类索引
u2(2个字节)用来确定这个类的父类的全限定名指向某块CP_INFO
接口索引集合
描述了这个类实现了哪些接口。前2个字节代表集合大小n,后面接n*u2块,代表接口索引实现了n个接口
6.字段表集合
filed_info为字段表集合,包含了类级变量及实例集变量,
头2个字节为集合大小。集合内单位为filed
private int m;
字段访问标识:private
描述符含义:int
简单名称:m



7.方法表集合
类似字段表集合的结构。
8.属性表集合
顺序没有硬性要求
jvm虚拟机字节指令表
哪天心情好再啃8。。枯了。
网友评论