Java 入门指南:JVM(Java虚拟机)—— 双亲委派模型(Parent Delegation Model)

双亲委派模型

双亲委派模型(Parent Delegation Model)是 Java 类加载机制中的一个核心概念,它用于组织和管理 Java 类加载器的工作方式。在Java中,类加载器负责将 .class 文件加载到内存中,并通过双亲委派模型来保证类的加载过程具有一定的安全性和统一性。

这一模型的核心思想是:类加载器在接收到类加载请求时,首先不会自己尝试加载该类,而是将这个请求委派给它的父类加载器去处理。只有当父类加载器无法加载该类时,当前类加载器才会尝试自己去加载

根据官方的说明:

ClassLoader使用委托模型来搜索类和资源。每个 ClassLoader 实例都有一个相关的父类加载器。需要查找类或资源时,ClassLoader 实例会在试图亲自查找类或资源之前,将搜索类或资源的任务委托给其父类加载器。

虚拟机中被称为 “bootstrap class loader” 的内置类加载器本身没有父类加载器,但是可以作为 ClassLoader 实例的父类加载器。

这里的双亲更多地表达的是“父母这一辈”的人,并不是说真的有一个 MotherClassLoader 和一个 FatherClassLoader

另外,类加载器之间的父子关系一般不是以继承的关系来实现的,而是通常使用组合关系来复用父加载器的代码。在面向对象编程中,有一条非常经典的设计原则:组合优于继承,多用组合少用继承。

public abstract class ClassLoader {
   
   
  ...
  // 组合
  private final ClassLoader parent;
  protected ClassLoader(ClassLoader parent) {
   
   
       this(checkCreateClassLoader(), parent);
  }
  ...
}

执行流程

双亲委派模型的实现代码的逻辑非常清晰,都集中在 java.lang.ClassLoaderloadClass() 中,以下是 loadClass() 的源代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值