虚拟机类文件结构
1、Java虚拟机提供的语言无关性
Java虚拟机不和包括java在内的任何语言绑定,它只与Class文件这种特定的二进制文件格式所关联。不论Class文件来源何种语言,Java虚拟机都能接受。
2、Class类文件的结构
无符号数属于基本的数据类型,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值,或者按照UTF-8编码构成字符串值。
表是由多个无符号数或其他表作为数据项构成的符合数据类型,所有表都习惯性地以“_info”结尾。表用于描述有层次关系得符合结构的数据,整个Class文件本质上就是一张表。它由下表所示的数据项构成。
3、魔术与Class文件的版本
每个Class文件的头4个字节称为魔数,它的唯一作用是用于确定这个文件是否为一个能被虚拟机接受的Class文件。
紧接着魔术的4个字节存储的是Class文件的版本号:第5和第6字节是次版本号,第7和第8字节是主版本号。
4、常量池
主次版本号之后的是常量池入口,常量池是Class文件结构中与其它项目关联最多的数据类型,也是占用Class文件空间最大的数据项目之一,同时它还是在Class文件中第一个出现得表类型数据项目。
Class文件结构中只有常量池的容量计数是从1开始的,对于其他集合类型,包括接口索引集合、字段表集合、方法表集合等的容量计数都与一般习惯相同,是从0开始的。
常量池之中主要存放两大类常量:字面量和符号引用。
5、访问标志
6、类索引、父类索引与接口索引集合
类索引(this_class)和父类索引(super_class)都是一个u2类型的数据,而接口索引集合是一组u2类型的数据的集合,Class文件中由这三项数据来确定这个类的继承关系。
类索引用于确定这个类的全限定名,父类索引用于确定这个类的父类的全限定名。类索引、父类索引和接口索引都按顺序排列在访问标志之后,类索引、父类索引用两个u2类型的索引值表示。
7、字段表集合
字段表集合不会列出从超类或者父类接口继承而来的字段,但有可能列出原本不存在的字段。
8、方法表集合
9、属性表集合
这些都是概念性的东西,没啥说的,就是讲述了Class文件的结构,想要了解更多,请查阅相关数据。
每天努力一点,每天都在进步。