首页 > 其他分享 >双亲委派机制

双亲委派机制

时间:2023-12-21 23:55:06浏览次数:21  
标签:委派 请求 ClassLoader Object 双亲 机制 加载

定义

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

很多人对“双亲”一词很困惑。这是翻译的锅。“双亲”只是“parents”的直译,实际上并不表示汉语中的父母双亲,而是一代一代很多parent,即parents。

描述:当某个类加载器需要加载某个.class文件时,它首先把这个请求任务委托给它的上级类加载器,递归这个操作,如果上级类加载器都没有加载,自己才会去加载这个类。

双亲委派模型的工作过程是:

  • 如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成。
  • 每一个层次的类加载器都是如此。因此,所有的加载请求最终都应该传送到顶层的启动类加载器中。
  • 只有当父加载器反馈自己无法完成这个加载请求时(搜索范围中没有找到所需的类),子加载器才会尝试自己去加载。

作用

  • 对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。因此,使用双亲委派模型来组织类加载器之间的关系,有一个显而易见的好处:类随着它的类加载器一起具备了一种带有优先级的层次关系。
  • 例如类 java.lang.Object,它由启动类加载器加载。双亲委派模型保证任何类加载器收到的对java.lang.Object的加载请求,最终都是委派给处于模型最顶端的启动类加载器进行加载,因此Object类在程序的各种类加载器环境中都是同一个类。
  • 相反,如果没有使用双亲委派模型,由各个类加载器自行去加载的话,如果用户自己编写了一个称为java.lang.Object的类,并用自定义的类加载器加载,那系统中将会出现多个不同的Object类,Java类型体系中最基础的行为也就无法保证,应用程序也将会变得一片混乱。

分类

  • Bootstrap ClassLoader:系统类(rt.ar)的类加载器,采用C++代码加载
  • Extension ClassLoader:扩展类(ext.jar)的类加载器,采用ExtClassLoader加载
  • Application ClassLoader:用户类路径(classpath)上类的类加载器,采用AppClassLoader加载
  • 自定义类加载器:自定义的类加载器,继承ClassLoader即可

标签:委派,请求,ClassLoader,Object,双亲,机制,加载
From: https://www.cnblogs.com/nxjblog/p/17920377.html

相关文章

  • 注意力机制打印cam
    importcv2importnumpyasnpfromPILimportImage#加载示例图像image_path='path/to/your/image.jpg'image=Image.open(image_path).convert('RGB')#预处理图像,以符合模型的输入要求preprocess=transforms.Compose([transforms.Resize((224,224)),......
  • 6. 类加载机制
    类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制与那些在编译时需要进行连接的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间......
  • JVM垃圾回收机制
    JVM垃圾回收机制JVM垃圾回收机制术语回收机制:在Java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫描那些没有被任何引用的对象,并将......
  • JVM类加载机制
    JVM类加载机制类加载机制概念概念说明:1)虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的Java类型。程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载(loading)、连接(linking)、初始化(initialization)3个步骤......
  • 接口超时,接口参数的特殊符号,接口的有序性,重试机制的结果一致性
    接口超时,接口参数的特殊符号,接口的有序性,重试机制的结果一致性1.http超时时间,将restTemplate的连接,超时时间设置更加长的时间。2.httpmvcGET请求,?a=1&b=2&c=#3,测试发现含#符号会在服务接口接收参数异常。需要将#特殊符合过滤,比如:可以替换为中文”井“3.请求的有序性保持3.1服......
  • clang VS gcc 的command-line机制: clang 在 MacOS 上要设置 -isysroot $(xcrun --sho
    clangVSgcc的command-line机制:clang在MacOS上作为编译器时要设置-isysroot$(xcrun--show-sdk-path)注意明确指定clang/clang++在MacOS上作为编译器时,一定要设置CFLAGS/CPPFLAGS为"-isysroot$(xcrun--show-sdk-path)${CFLAGS}"CC="/usr/local/bin/clang"C......
  • 玩转Sermant开发,开发者能力机制解析
    本文分享自华为云社区《开发者能力机制解析,玩转Sermant开发》,作者:华为云开源。前言:在《Sermant框架下的服务治理插件快速开发及使用指南》中带大家一起体验了Sermant插件的开发,快速的了解了Sermant插件开发的全过程,本着从入门到精通的思路,本文对在开发中所常用的能力,从机制上进......
  • 为什么大多数语言都不支持LINQ机制?
    C# 3.0可以说是C#历史上最大的一次改动,从语言到库的层面可以说是做了革命性的变化,单单是上下文关键字,就一次性新增了from、where、select、group、by、join、equals、on、let、order、into、asscending、descending一大堆,加上原有的in啥的。这特么就是重新设计了一个新的语言。......
  • Linux内核中的同步机制
    Linux内核中的同步机制是用来确保在多任务、多处理器环境下的并发操作的正确性和一致性。以下是一些主要的同步机制:原子操作:原子操作是不可分割的操作,也就是说,它们在执行过程中不会被中断。这对于保护共享数据非常关键,特别是在多处理器环境中。信号量(Semaphore):信号量是......
  • Resilio Sync的同步机制
    设置好ResilioSync的同步文件夹之后,可以在多个设备间互相同步。那么同步是如何进行的呢?又是如何处理版本控制和文件冲突的呢?根据官方文档的说明,我整理出了以下内容,希望可以解答上面的疑惑。.sync文件夹在Resilio本地同步文件夹中,有一个隐藏文件夹,名为 .sync,里面存储了设备信息......