深入理解java虚拟机--第六章读书笔记

Class文件是以8进制文件为基础单位的二进制流,在class文件中各种数据排列,没有任何分隔符。

 

类似于C语言结构体的伪结构来存储数据,这种伪结构只有两种数据类型,无符号数和表。

 

无符号数属于基本的数据类型,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值或者按照
UTF-8编码构成字符串值。

      表是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有表都习惯性地以“info"结尾。表用于描述有层次关系的复合结构的数据,整个Class文件本质上就是一张表,

 

每个class文件开头是魔数,第五第六个字节为次版本号,第七第八为主版本号。虚拟机拒绝执行超过其版本号的class文件。

 

       版本号之后是常量池入口,常量池存放字面量和符号引用。

 

使用16进制编辑器打开class文件,每两个数字表示一个字节(2的八次方等于16的二次方)。使用u2来表示常量池容量计数值。故第八九个字节就表示一个常量池中的常量的数目(从一开始计数),第十个字节表示项目类型,该常量表示该类的全限定名,后面看书吧P169页-P173页

 

在常量池结束之后,紧接着的两个字节代表访问标志(acess flags), 这个标志用于识别-些类或者接口层次的访问信息,包括:这个Class是类还是接口;是否定义为public类型:是否定义为abstract类型;如果是类的话,是否被声明为final等。将为真的标志名称的标志值相加的结果作为access flags。

 

类索引,父类索引与接口索引集合

 

       字段表集合

 

       方法表集合

       剩下的内容基本都采用acess flags结合特定标志名称的标志值来存储数据。

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页