深入了解类加载器

时间:2021-10-06 14:33:09
1:类加载器的层次结构(类加载器采用合作关系并不是继承关系)

      (1):引导类加载器(bootStrap class loader)它用来加载java的核心库(JAVA_HOME/jre/lib/re.jar路径下的内容),这个类是用C语言来实现的,java程序无法直接使用。

      (2):扩展类加载器(extensions class loader)它用来加载java的扩展库(JAVA_HOME/jre/ext/*.jar)java虚拟机会提供一个扩展类库目录来加载,java程序可以直接使用。

      (3):应用程序类加载器(Application ClassLoader)该类加载器也称为系统类加载器,它负责加载用户类路径(Classpath)上所指定的类库,开发者可以直接使用该类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。

        (4) : 自定义类加载器开发者可以通过继承java.lang.classLoader类来实现自己的类加载器。

深入了解类加载器

2:类加载器采用代理模式进行(交给其他加载器来加载指定的类)

3:类加载器采用了代理模式里面的双亲委派机制,这样可以保证java类的安全性,如果程序开发者自定了一个java核心类库已经存在的类,那么加载器首先从上往下加载直至最后才会加载到用户的自定义类加载器,(比如自定义了个java.lang.String 里面有个toString() 双亲委派机制会首先委派最上层的加载器加载,一旦发现有这个类在java的核心库有则执行java核心库的java.lang.String 不会加载程序开发者自定义的类),tomcat 一些web容器 则未使用双亲委派机制