Java类加载器解析

一:分类

Java中的类加载器可以分为四类:

Java类加载器解析_第1张图片

1 Bootstrp loader
Bootstrp加载器是用C++语言写的,它是在Java虚拟机启动后初始化的,它主要负责加载%JAVA_HOME%/jre/lib以及%JAVA_HOME%/jre/classes中的类。



2 ExtClassLoader
   Bootstrp loader加载ExtClassLoader,并且将ExtClassLoader的父加载器设置为Bootstrp loader.ExtClassLoader主要加载%JAVA_HOME%/jre/lib/ext中的jar文档,以及此路径下的所有classes目录。

Java类加载器解析_第2张图片

3 AppClassLoader
  Bootstrp loader加载完ExtClassLoader后,就会加载AppClassLoader,并且将AppClassLoader的父加载器指定为ExtClassLoader。AppClassLoader主要负责加载classpath所指定的位置的类或者是jar文档。

Java类加载器解析_第3张图片

4 URLClassLoader
    URLClassLoader是我们可以自定义的加载器,我们可以通过指定一个URL对象来创建此加载器,它所加载路径就是URL所代表的逻辑位置。并且它的父加载器是AppClassLoader。

(*注意:某个加载器的父加载器与加载它的加载器没有联系,父加载器是按照规定的规则指定的)

二:委托模型

   所谓委托模型就是指:当一个加载器在加载某个类的时候先让父加载器去加载,父加载器再让其父加载器加载,依此类推,如果所有的父加载器都不能加载,再由自己来加载,而如果此时自己也不能加载,则产生java.lang.NoClassDefFoundError错误。
   委托模型最大的好处就是提高了java的安全性,比如:如果加载器的父加载器已经加载了某个类,那么自己就不能再加载此类了,这样就使得一些与java类库中同名的类不能加载进来。

Java类加载器解析_第4张图片

你可能感兴趣的:(java)