java类的加载过程及双亲委派机制

java类的加载过程及双亲委派机制

加载过程如下:
加载 —> 验证 —> 准备 —> 解析 ----> 初始化

1. 加载

加载的主要动作是讲外部的.class文件加载到java的方法区内。

2.验证

在java虚拟机中,不是任何的内都可以加载,如一些恶意文件等,验证这阶段的工作就是验证java的class文件是否正确,是否符合jvm虚拟机的规范等

3.准备

准备是为一些类的变量分配内存,并将其初始化成默认值,实例对象这时候是不会分配内存的,这些动作是在方法去上进行的

4.解析

解析是将类中的符号引用转为直接引用的过程,就是将变量指向变量所在的内存。

5.初始化

最后一步成员变量的初始化

延伸扩展

java静态代码块一般是在准备阶段执行,而构造函数及成员变量赋值在初始化阶段,再记录一下继承的构造函数,一般都是先执行父类的构造函数,再执行子类的构造函数,如果出现多继承,则逐级执行

类的加载器

以下是几个常用的类加载器:
Bootstrap ClassLoader
这是主要加载器,任何类的加载行为都是要经过它,加载核心类库,是随着jvm启动的
Extention ClassLoader
扩展类加载器主要加载lib/ext下的jar包
App ClassLoader
加载我们所使用的类
Custom ClassLoader
自定义加载器,支持一些个性化的扩展功能

双亲委派机制

类的加载器的加载过程如下
Bootstrap ClassLoader -> Extention ClassLoader -> App ClassLoader-> Custom ClassLoader
加载的时候,每加载一个类基本上都是先询问上层的类,如果上层的类可以帮忙加载则由上层的类进行加载。如App ClassLoader现在有任务加载一个类,他会先询问 Extention ClassLoade是否可以加载,Extention ClassLoade就又会询问Bootstrap ClassLoader,如Bootstrap ClassLoader能够加载则由Bootstrap ClassLoader进行加载,如Bootstrap ClassLoader不能加载Extention ClassLoade可以加载,则由Extention ClassLoade进行加载,如果都不能加载则由App ClassLoader进行加载,这就是双亲委派机制,其实是单亲委派机制,是因为使用parent这个单词,因此习惯的被称为双亲委派机制

当然也有一些加载过程不是双亲委派机制的如:tomcat的加载过程,osgi的加载过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值