Java 的双亲委派是什么?阿巴阿巴

此答案节选自我们最近弄的 面试鸭小程序,更多大厂常问面试题,可以点击下面的小程序进行阅读哈!


目前这个面试刷题小程序刚出,详细可以看这篇文章:这次,终于不用再被八股文吊打了!

回归面试题!

双亲委派的意思是:如果一个类加载器需要加载类,那么首先它会把这个类加载请求委派给父类加载器去完成,如果父类还有父类则接着委托,每一层都是如此。一直递归到顶层,当父加载器无法完成这个请求时,子类才会尝试去加载。

父类也不是我们平日所说的那种继承关系,只是调用逻辑是这样。

在 JDK 9 之前,Java 自身提供了 3 种类加载器:

  1. 启动类加载器(Bootstrap ClassLoader),它是属于虚拟机自身的一部分,用 C++ 实现的,主要负责加载<JAVA_HOME>\lib目录中或被-Xbootclasspath指定的路径中的并且文件名是被虚拟机识别的文件。它是所有类加载器的爸爸。
  2. 扩展类加载器(Extension ClassLoader),它是 Java 实现的,独立于虚拟机,主要负责加载<JAVA_HOME>\lib\ext目录中或被java.ext.dirs系统变量所指定的路径的类库。
  3. 应用程序类加载器(Application ClassLoader),它是 Java 实现的,独立于虚拟机。主要负责加载用户类路径(classPath)上的类库,如果我们没有实现自定义的类加载器那这玩意就是我们程序中的默认加载器。

所以一般情况类加载会从应用程序类加载器委托给扩展类再委托给启动类,启动类找不到然后扩展类找,扩展类加载器找不到再应用程序类加载器找。

双亲委派模型不是一种强制性约束,也就是你不这么做也不会报错怎样的,它是一种JAVA设计者推荐使用类加载器的方式

为什么要有双亲委派机制?

它使得类有了层次的划分。就拿 java.lang.Object 来说,加载它经过一层层委托最终是由 Bootstrap ClassLoader来加载的,也就是最终都是由Bootstrap ClassLoader 去找\librt.jar里面的java.lang.Object加载到 JVM 中。

这样如果有不法分子自己造了个java.lang.Object,里面嵌了不好的代码,如果我们是按照双亲委派模型来实现的话,最终加载到 JVM 中的只会是我们rt.jar里面的东西,也就是这些核心的基础类代码得到了保护。

因为这个机制使得系统中只会出现一个java.lang.Object。不会乱套了。你想想如果我们 JVM 里面有两个 Object,那岂不是天下大乱了。

那你知道有违反双亲委派的例子吗?

典型的例子就是:JDBC

JDBC 的接口是类库定义的,但实现是在各大数据库厂商提供的 jar 包中,那通过启动类加载器是找不到这个实现类的,所以就需要应用程序加载器去完成这个任务,这就违反了自下而上的委托机制了。

具体做法是搞了个线程上下文类加载器,通过 setContextClassLoader() 默认设置了应用程序类加载器,然后通过 Thread.current.currentThread().getContextClassLoader() 获得类加载器来加载。

JDK 9 关于类加载器进行了一些修改,详细可以看面试鸭:《类加载器有了解过吗?》这题。

最后

最后再推荐下鸭鸭目前努力在做面试小程序神器,如果大家有不会的面试题,也可以在小程序内反馈!鸭鸭会第一时间为大家解答!

网页版也即将上线!后续肯定会涨价,现在就是最低价!

我是鸭鸭,我们下期见~

相关推荐

  • 送一些程序员壁纸,最后一张有惊喜!
  • Java 面试常见问题总结(2024 最新版)
  • 面试官:你了解乐观锁和悲观锁吗?CAS 是如何实现的?
  • AI狙击配音行业!5000名澳大利亚配音演员饭碗不保,AI克隆配音取代真人角色?
  • 只要4.66MB,安卓版Claude今日起人人可下!AI应用版图已补全
  • 原作亲自下场!Mistral首款开源7B Mamba模型「埃及艳后」效果惊艳
  • AI大神Karpathy官宣创业,打造80亿人AI原生学校!首款课程GitHub斩获17k星
  • 「13.11>13.8」冲上热搜,一道题让人类AI集体降智?所有LLM致命缺点曝光
  • 大厂P7老公被裁,说以后房贷要靠我还
  • ICML 2024 | 具有O(L)训练存储和O(1)推理功耗的时间可逆脉冲神经网络
  • 招聘|快手算法工程师
  • 【报名中】阿里云 x StarRocks:极速湖仓第二季—上海站
  • 分布式 Data Warebase - 让数据涌现智能
  • 微软野心再现:对Excel和谷歌Sheet下手了!
  • 百度内容生态视频AIGC新探索
  • 神速!枪击特朗普刺客手机已被破解!一文讲解FBI破解手机有多难:曾找苹果CEO库克建后门惹怒被拒,FBI:花百万美元我们自己搞!
  • 【云原生|K8S系列】K8s新手必看,不可不知的K8s技能,Service发现全解析!
  • 首个WebAgent在线评测框架和流程数据管理平台来了,GPT-4、Qwen登顶闭源和开源榜首!
  • Prompt工程师要下岗了!北大发布Prompt自动增强系统PAS,超越SOTA
  • AI+教育!前OpenAI联创Andrej Karpathy官宣创业!创办第一所AI原生学校