JAVA Class文件和类加载机制
1 class文件结构 Class文件结构是了解虚拟机的重要基础之一,如果想深入的了解虚拟机,Class文件结构是不能不了解的。 Class文件是一组以8位字节为基础单位的二进制流,各项数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,如果是超过8位字节以上空间的数据项,则会按照高位在前的方式(Big-Endian)分割成若干个8位字节进行存储。(Big-Endian模式具体可见 详解大端模式和小端模式 ) Class文件中包含了Java虚拟机指令集和符号表以及若干其他辅助信息。 Class文件格式只有两种数据类型:无符号数和表。 无符号数属于基本的数据类型,以u1,u2,u4,u8来分别代表1个字节,2个字节,4个字节和8个字节的无符号数;可用来描述数字,索引引用,数量值或者按照UTF-8编码构成的字符串值。 表是由 多个无符号数或者其他表作为数据项构成的复合数据类型 ,所有表都习惯性地以“_info”结尾。表用于描述由层次关系的复合结构的数据。 整个Class文件本质上就是一张表 class文件的内容中没有任何的分隔符号,所以在上表中的数据项,无论是顺序还是数量,都是被严格限定的,哪个字节代表什么含义,长度多少,先后顺序如何,都不允许改变。 1.1 魔数和class文件的版本 Class文件的头4个字节成为魔数(Magic Number)