我是靠谱客的博主 自觉雨,最近开发中收集的这篇文章主要介绍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 .开头的类都不会去加载。

最后

以上就是自觉雨为你收集整理的java 类加载器有哪些的全部内容,希望文章能够帮你解决java 类加载器有哪些所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部