双亲委派模型

  从Java虚拟机的角度来说,只存在两种不一样的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用c++语言实现,是虚拟机自身的一部分;另外一种就是全部其余的类加载器,这些加载器都是由Java语言实现,独立与虚拟机外部,而且所有都继承自java.lang.ClassLoader。java

  从开发人员角度来看,类加载器还可划分得更细致一些,绝大部分Java程序都会使用到如下3种系统提供的类加载器。启动类加载器,扩展类加载器,应用程序类加载器。咱们的应用程序都是由这3种类加载器互相配合进行加载的,若是没有必要,还能够加入本身定义的类加载器。c++

  

        类加载器双亲模型blog

  双亲委派模型要求除了顶层的启动类加载器外,其他的类加载器都应当有本身的父类加载器。继承

  双亲委派模型工做过程:若是一个类加载器收到了类加载的请求,它首先不会本身去尝试加载这个类,而是把请求委派给父类加载器去完成,每个层次的类加载器都是如此,所以全部的加载请求最终都应该传送到顶层的启动类加载器中,只有当父类加载器反馈本身没法完成这个加载请求时,子加载器才会尝试本身去加载。开发

  优势:Java类随着它的类加载器一块儿具有了一种带有优先级的层次关系;保证Java程序的稳定运做。虚拟机

  实现:先检查是否已经被加载过,若没有加载则调用父加载器的loadClass()方法,若父加载器为空则默认使用启动类加载器做为父加载器。若是父类加载失败,抛出ClassNotFoundException异常后,再调用本身的findClass()方法进行加载。io

参考文献扩展

《深刻理解Java虚拟机》  机械工业出版社  周志明著请求

相关文章
相关标签/搜索