JAVA类加载器学习

1.类加载过程

首先加载过程大体分为3步,即装载,链接,初始化。


装载:加载类的二进制数据
链接:分为三部分。
(1)验证:确保加载类正确,防止恶意class文件
(2)准备:为静态变量分配内存,初始化默认值
(3)解析:为类中的符号引用转化为直接引用
初始化:为静态变量赋值。

2.类的初始化

初始化时间点有:
(1)创建实例
(2)访问静态变量,或对该静态变量赋值
(3)访问静态方法
(4)反射
(5)子类被初始化
(6)JVM启动时标明的启动类

3.类的加载

这里写图片描述
加载类的方式有以下几种:
(1)从本地系统直接加载
(2)通过网络下载.class文件
(3)从zip,jar等归档文件中加载.class文件
(4)从数据库中提取.class文件
(5)将java源文件动态编译.class文件(服务器)

4.加载器

1)Bootstrap ClassLoader
负责加载JAVA_HOME中jre/lin/rt.jar里的所有class,由c++实现,不是ClassLoader子类
2)Extension ClassLoader
负责加载JAVA平台中扩展的一些JAR包,包括JAVA_HOME中jre/lib/*.jar或者-Djava.ext.dirs指定目录下的jar包。
3)APP ClassLoader
负责加载classpath中指定jar包及目录中class
4)Custom ClassLoader
属于应用程序根据自身需要定义的ClassLoader,如tomcat,jboss都会根据j2ee规范实现ClassLoader加载过程中会先检查类是否被已加载,检查顺序是自底向上的,从Custom ClassLoader到Bootstrap ClassLoader逐层检查,只要某个classLoader已经加载就视为已加载此类,保证此类只被所有classLoader加载一次。而加载顺序却是自顶向下的,也就是由上层来逐层尝试加载此类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值