深入理解Java虚拟机(4)Class文件结构与类加载

深入理解Java虚拟机(4)Class文件结构与类加载

Class文件结构与类加载

本节大致说一下Class文件的结构,有个大致了解即可,然后说一下类的加载机制。

Class文件结构

Class文件的前四个字节为魔数:0xCAFEBABE(咖啡宝贝),然后四个字节是Java的版本号,然后是常量池,常量池的第一个量为容量计数值(相当于表示了常量池的大小,因为Class文件内容之间没有分隔符),为u2类型,然后是常量,分为字面量和符号引用两种,字面量就像是Java中的常量,符号引用包括:类和接口的全限定名、字段的名称和描述符。常量池中的每个常量都是一个表,表的开头是一个u1类型的标志位,表示是那种常量类型,可用javap -verbose指令来进行分析;接下来是访问标志,用于识别类或者接口层次的信息,包括:这个class是类还是接口,是否是public类型等等;然后是类索引(本类),父类索引(父类),接口索引集合(实现的接口,开头是一个接口计数器)。

对class文件结构大致说到这里,后面还有一些没有提到,这一部分主要是使对class文件有一个了解,知道是什么,用来做什么的,具体需要用到时,详细部分可以查看原书第六章。

类加载的阶段

类加载分为以下几个阶段:加载、验证、准备、解析、初始化、使用、卸载。

类加载的双亲委派模型

如图所示:
在这里插入图片描述
如果一个类加载器收到类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈无法加载时,子加载器才会尝试自己去加载。

双亲委派模型的重要性:如果没有双亲委派模型,比如object类原来都是在启动类加载器中加载,没有这个模型后会在各种不同的加载器中加载,因为唯一性是通过类和类加载器来确定的,所以那样会出现很多个object类,那样就乱套了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值