三种类加载器以及双亲委派机制

四种类加载器以及双亲委派机制

引导类加载器(bootstrap class loader)用来加载Java的核心库(JAVA_HOME/jre/lib/rt.jar),使用原生代码写的,并不是继java.lang.ClassLoader

扩展类加载器(extensions class loader)用来加载Java的扩展库(JAVA_HOME/jre/ext/*.jar),Java虚拟机的实现会提供一个扩展库目录,该类加载器在此目录里面查找并加载Java类

应用程序类加载器(application class loader),一般来说Java应用的类都是由它来完成加载的

自定义类加载器,通过继java.lang.ClassLoader类的方式实现自己的类加载器
扩展类加载器,应用程序类加载器和自定义类加载器都是用Java来实现的,都继承自java.lang.ClassLoader,而引导类加载器底层是使用c或者c++实现的

双亲委派机制(代理模式):
某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次追溯,直到最高的父类,如果父类加载器可以完成类加载任务,就成功返回;如果父类无法完成此加载任务时,才自己去加载
双亲委派机制是为了保证Java核心库的类型安全,这种机制就保证了不会出现用户自己能定义java.lang.String类的情况,也并不是所有的类加载器都采用双亲委派机制,例如tomcat服务器类加载器也使用了代理模式,它会首先尝试自己去加载某个类,如果找不到再代理给父类加载器

    原文作者:旧时光的小弥猫
    原文地址: https://blog.csdn.net/weixin_44007988/article/details/101380430
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞