java 类加载器有哪些

jdk 自带有三个类加载器:

BootstrapClassLoader、ExtClassLoader、AppClassLoader。

  • BootstrapClassLoader (启动类加载器)是 ExtClassLoader
    的父类加载器(并不是直接的一个继承关系,通过ExtClassLoader 里面有一个parent属性,这个属性是BootstrapClassLoader),负责加载%JAVV_HOME%/lib/文件下的jar 包 和class文件,java核心类库,无法被java程序直接引用。
  • ExtClassLoader(扩展类加载器) 是AppClassLoader 的父类加载器,负责加载%JAVV_HOME%/lib/文件下的jar
    包 和class 类。
  • AppClassLoader(默认的系统类加载器、线程上下文加载器) 是自定义加载类的父类,负责加载classpath 下的类文件(程序员自己写的代码以及引入的jar 包)。

在这里插入图片描述
AppClassLoader 负责加载程序员自己写的代码以及 引入的jar 包
双亲委派模型
向上委派(查找缓存),向下查找(加载路径)
AppClassLoader 在加载一个类的时候,不会直接拿着这个类去加载,他首先会向上委派,实际上就是去查找缓存,每一个类加载类都有各自的缓存,他们会把自己加载过的类放在自己的缓存里面。然后AppClassLoader 加载的时候从AppClassLoader 开始,因为程序启动的时候是从我们的main 方法开始启动,main 方法是由我们的 AppClassLoader 进行加载的,开始的时候遇到一个类的时候不是说直接去加载,先去向上委派(实际上就是去查找缓存),首先找自己的缓存有没有加载,如果没有,会向上查找直到。如果在缓存中找到了,就不用加载了,说明他已经加载了,直接返回就可以了。如果找到最上层还是没有找到,这个时候会去自己的加载路径进行查找(向下查找),如果有这个类,直接加载返回,如果这个类没有,向下查找(加载路径),如果一直没找到,会报找不到这个类。
向上查找,查找到最顶层的加载器为止,向下委派,委派到发起加载的加载器为止。

双亲委派模型的好处

  • 为了安全性,避免用户自己编写的类动态替换java 的一些核心类,比如String。
  • 同时也避免了类的重复加载,因为jvm 中区分不同类,不仅仅是根据类名,相同的class 文件被不同的ClassLoader 加载就是不同的两个类。
    注意:在JAVA 中,所有以java .开头的类都不会去加载。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值