• 双亲委派模型


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

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

      

            类加载器双亲模型

      双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。

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

      优点:Java类随着它的类加载器一起具备了一种带有优先级的层次关系;保证Java程序的稳定运作。

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

    参考文献

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

  • 相关阅读:
    springboot之scheduled任务调度
    nginx部署与安装
    hive 导出如数为csv格式
    hive函数应用之操作json
    解决Azure 消息队列ServiceBus提示证书不信任无权限的问题
    读书笔记--《不能承受的生命之轻》读后感
    localhost和127.0.01 区别
    C# 利用反射动态加载dll
    .NET MVC 简单的插件式开发
    爬虫发起抓取被服务器拒绝访问返回403禁止访问解决方案
  • 原文地址:https://www.cnblogs.com/chump-zwl/p/7347246.html
Copyright © 2020-2023  润新知