一文搞懂Java中的双亲委派

一天正在宿舍里忙着写代码。突然,老师给我布置了一项新任务:优化他正在开发的项目中的类加载机制。我对类加载器了解不多,开始翻阅各种资料,逐渐了解了Java中的类加载器机制。尤其是当读到双亲委派模型时,脑海中豁然开朗。仿佛看到了类加载请求在层层递进、逐步传递的画面,像极了树状结构中的节点。于是,决定写一篇博客,把自己的理解分享给更多的开发者。

什么是双亲委派模型

在Java中,类加载器(ClassLoader)是一个非常重要的组件,用于在运行时动态加载类文件。而双亲委派模型则是类加载器的一种重要机制,它规定了类加载请求的传递顺序,从而确保了Java类加载过程的安全性和稳定性。

双亲委派模型的原理

当一个类加载器收到类加载请求时,它不会自己直接去加载这个类,而是首先将请求委派给它的父类加载器。如果父类加载器无法完成这个加载请求,子类加载器才会尝试自己去加载。

类加载器的层次结构

有一张图比较形象:

 

在Java中,类加载器大致分为三种:

  1. 启动类加载器(Bootstrap ClassLoader)

    • 负责加载Java核心类库,如rt.jar
    • 由JVM内部实现,没有父加载器。
  2. 扩展类加载器(Extension ClassLoader)

    • 负责加载扩展类库,如lib/ext目录下的类。
    • 启动类加载器的子类加载器。
  3. 应用程序类加载器(Application ClassLoader)

    • 负责加载用户类路径(classpath)上指定的类。
    • 扩展类加载器的子类加载器。

 双亲委派的优点

这种层层委派的机制保证了Java核心类库的安全性。例如,java.lang.Object类总是由顶层的启动类加载器(Bootstrap ClassLoader)加载,从而避免了用户自定义的类库篡改核心类库的风险。

小实践

在编译层面

  • java.lang 包的类被编译成字节码文件,并被打包在 rt.jar(运行时库)中。rt.jar 文件位于 JDK 的 lib 目录下。
  • 绝对路径:C:\Program Files\Java\jdk1.8.0_261\jre\lib\rt.jar!\java\lang\ClassLoader.class

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1483996.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【鸿蒙学习笔记】舜和酒店项目开发

这里写目录标题 前期准备1. 环境准备2. 开发工具准备 创建项目1. 使用 deveco-studio 创建 ShunHeHotel 项目2. 把ShunHeHotel 项目使用git进行版本控制3. 提交第1个commit,Alt0 → 输入commit message → 提交4. 查看已经提交的第一个提交5. gitcode 创建同名远程项…

微信小程序毕业设计-选课系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

杭州外贸网站建设 最好用wordpress模板来搭建

防护服wordpress外贸网站模板 消防服、防尘服、隔热服、防化服、防静电服、电焊服wordpress外贸网站模板。 https://www.jianzhanpress.com/?p4116 工业品wordpress外贸网站模板 机械及行业设备、五金工具、安全防护、包装、钢铁、纺织皮革等工业品wordpress外贸网站模板。…

家庭主妇人格独立问题,不断成长自己,保持人格独立

86天 周六反省 家庭主妇人格独立问题; 深刻反省自己,成长、改变自己;身体有毛病就去治疗,心上有问题就去改正;多年形成的习惯需要下功夫填坑 无论在哪个时刻我们都应该成长自己、人格独立,和爱人一起成长…

卷积神经网络【CNN】--池化层的原理详细解读

池化层(Pooling Layer)是卷积神经网络(CNN)中的一个关键组件,主要用于减少特征图(feature maps)的维度,同时保留重要的特征信息。 一、池化层的含义 池化层在卷积神经网络中扮演着降…

mac如何合并pdf文件到一个文件 macpdf合并 Mac如何合并pdf文件

在数字化的今天,pdf文件因其跨平台、格式统一等优势,已经成为工作、学习和生活中不可或缺的文件格式。然而,当我们需要合并多个pdf文件时,可能会感到有些无从下手。本文将为你详细介绍几种简单实用的合并pdf的方法,让你…

使用Tailwind CSS实现响应式面板

本文由ScriptEcho平台提供技术支持 项目地址:传送门 代码应用场景 此代码旨在用作 Web 应用程序或软件平台的仪表板界面。它提供结构化布局,包含多个部分,用于显示关键统计数据、最近活动和用户管理功能。仪表板旨在提供基本数据的全面概述…

第十四届蓝桥杯省赛C++B组H题【整数删除】题解(AC)

题目大意 依次删除长度为 n n n 的数组中的 k k k 个最小值,在删除一个数后,该数的相邻数加上它的值,输出最终数组。 解题思路 数组中删除一个数的复杂度为 O ( n ) O(n) O(n),故我们可以考虑用链表进行维护,这样…

3112. 访问消失节点的最少时间 Medium

给你一个二维数组 edges 表示一个 n 个点的无向图,其中 edges[i] [ui, vi, lengthi] 表示节点 ui 和节点 vi 之间有一条需要 lengthi 单位时间通过的无向边。 同时给你一个数组 disappear ,其中 disappear[i] 表示节点 i 从图中消失的时间点&#xff0…

【hadoop大数据集群 2】

【hadoop大数据集群 2】 文章目录 【hadoop大数据集群 2】1. 虚拟机克隆2. 时间同步3. 环境变量配置、启动集群、关闭集群 1. 虚拟机克隆 克隆之后一定要重新生成新虚拟机唯一的MAC地址和UUID等,确保新虚拟机与源虚拟机在网络拓扑中不发生冲突。 注意1.生成新的MA…

【C++】C++设计远程桌面软件的技术详解

在当今的数字化时代,远程桌面技术已成为企业远程办公、技术支持、教育培训等领域不可或缺的一部分。它允许用户从任何地点通过互联网安全地访问和控制远程计算机,就像直接坐在那台计算机前一样。C作为一种高效、灵活且性能强大的编程语言,非常…

C++ 继承详解:从基础到深入

继承是面向对象编程中最强大的功能之一,它不仅促进了代码的重用,还帮助我们构建复杂的系统。在C中,通过继承,我们可以创建一个新的类(称为派生类)来扩展现有类(基类)的功能。本文将全…

复学数据结构

1.for循环 c中的for循环和js的for循环用法一样 for (初始化表达式; 条件表达式; 递增/递减表达式) {// 循环体 } 2.数组 1)时间复杂度 算法 平均情况 最坏情况 访问 O(1) O(1) 搜索 O(n) O(n) 插入 O(n) O(n) 删除 O(n) O(n) 2)C 将高维维数组存…

10个常见的电缆载流表,值得收藏!

众所周知,电线电缆的载流是所有电工、电气人员都必须具备的基本储备,但是如果要将那么多的“数字”都记得清清楚楚,还是有一点困难的!今天咱们就做了一个电力电缆载流量对照表,速度收藏!下次参考不迷路! 1、0.6/1KV聚氯乙烯绝缘电力电缆载流量 以上电缆载流量计算条件:…

一个小问题导致,AI大模型集体翻车?

9.11大还是9.9大? 这两天大家都在说ChatGPT大模型翻车了 ! 这到底是怎么个事儿呢? 原来是最近有人想ChatGPT等大模型提了一个简单的问题: 9.11 大还是 9.9 大? 答案显而易见,然而众多大模型却给出了错误…

AI小白也能驾驭!10款免费工具让你秒变高手

市面上的AI工具种类繁多,覆盖了从创意设计到日常工作处理的各个领域。下面列出了10款实用的AI工具,它们能帮你在不同场景下提升效率,解决实际问题: Aicbo:这个在线生成工具可以根据你提供的描述生成图像,适…

鸿蒙开发error: failed to start ability

鸿蒙开发项目编译过后不能启动 项目在模拟器运行报: error: failed to start ability. Error while Launching ability 解决办法: 1,看了一些文章说是把module.json5配置文件中的"exported"由false改成true,没有解…

JavaScript基础 第五弹 学习笔记

一、什么是对象? 对象:JavaScript里的一种数据类型;可以理解为是一种无序的数据集合,但是数据是有序的数据集合。可以详细的描述某个事物 二、对象使用 1.对象声明语法 let 对象名 { } ;let 对象名 new Object() le…

Kafka(四) Consumer消费者

一,基础知识 1,消费者与消费组 每个消费者都有对应的消费组,不同消费组之间互不影响。 Partition的消息只能被一个消费组中的一个消费者所消费, 但Partition也可能被再平衡分配给新的消费者。 一个Topic的不同Partition会根据分配…

阿里云DSW实例中安装并运行Neo4J

想尝试使用大模型对接Neo4J,在阿里云DSW实例中安装了Neo4J,却无法通过本地浏览器访问在DSW实例中运行的Neo4J。尝试了改neo4j.conf文件,以及添加专用网络的公共IP地址等方法,均没有成功。最后决定直接在服务器的命令行进行各种Cyp…