Java中的类加载机制

1. 类的生命周期

加载->连接(验证->准备->解析)->初始化->使用->卸载

2. 类加载的具体步骤

加载
  1. 首先通过类的全限定名,来获取到定义这个类的二进制字节流。
  2. 再将字节流转化为动态的一个数据结构保存到方法区中。
  3. 把类的class文件读取到内存中,再创建一个java.lang.Class的对象,之后访问这个类的数据时,这个对象就可以作为类的一个访问数据入口。
连接
  1. 验证:这一步会校验这个类的一个数据信息、文件格式还要字节码是否符合JVM规范,因为他需要和其他类要协调一致。
  2. 准备:在方法区中给类的一些静态属性分配内存空间,并赋予初始默认值。
  3. 解析:把类的二进制中的符号引用替换为直接引用,将引用和堆中对象直接关联起来。
初始化

主要对类变量进行一个初始化。这里如果父类还没有初始化,就先初始化父类。要是有初始化语句,就依次执行这些语句。

3. 类加载器

四种类加载器
* 启动类加载器:lib目录下的jar包。
* 扩展类加载器:lib/ext目录下的包。
* 系统类加载器:没有指定加载器的话,就使用默认的Application-ClassLoader。
* 自定义类加载器:自己实现的类加载器。
双亲委派机制

首先加载器拿到先不加载,这里他先检查这个类被加载过没,没加载过的话,内部会对parent进行一个判断,看你是不是null,不是null的话就把这个class文件交给父加载器,这样一直到启动类加载器为止。如果是null,也会直接交给启动类加载器。此时就可以进行加载了,但是也要先判断这个类的类型和我加载的是不是同一个类型,如果不是我要负责的类型,就再交给下一级的加载器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值