JVM中的双亲委派模型

news2024/11/24 14:59:05

        双亲委派模型(Parent-Delegation Model)是Java类加载器(ClassLoader)机制的一种实现方式。它是Java中实现类加载的一种层次结构模型。

双亲委派模型的工作过程是:在Java中,每个类加载器实例都有一个父类加载器(除了根加载器,它没有父类加载器)。当一个类加载器需要加载一个类时,它首先会委派给它的父类加载器去尝试加载。只有当父类加载器无法加载该类时,子加载器才会尝试加载类。

        这个委派过程会一直向上追溯,直到达到根加载器。根加载器是Java虚拟机内置的类加载器,它负责加载Java核心类库(如java.lang包下的类)和其他被系统类加载器委派的类。如果根加载器无法加载类,那么子加载器会尝试使用自己的加载机制加载类。

双亲委派模型的实现:

protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
		// 首先,检查请求的类是否已经被加载过了
		Class c = findLoadedClass(name);
		if (c == null) {
			try {
				if (parent != null) {
					c = parent.loadClass(name, false);
				} else {
					c = findBootstrapClassOrNull(name);
				}
			} catch (ClassNotFoundException e) {
			// 如果父类加载器抛出ClassNotFoundException
			// 说明父类加载器无法完成加载请求
			}
			if (c == null) {
				// 在父类加载器无法加载时
				// 再调用本身的findClass方法来进行类加载
				c = findClass(name);
			}
		}
		if (resolve) {
			resolveClass(c);
		}
		return c;
	}

        先检查请求加载的类型是否已经被加载过,若没有则调用父加载器的loadClass()方法,若父加载器为空则默认使用启动类加载器作为父加载器。假如父类加载器加载失败,抛出ClassNotFoundException异常的话,才调用自己的findClass()方法尝试进行加载。

这种双亲委派模型的设计有以下几个好处:

  1. 避免类的重复加载:当一个类加载器要加载一个类时,它会首先委派给父类加载器,如果父类加载器能够加载成功,就没有必要再由子加载器加载,这样可以避免同一个类被多个加载器重复加载的问题。

  2. 安全性:由于每个加载器只能加载自己的类和其父加载器委派的类,因此可以控制类的加载权限。核心类库由根加载器加载,防止被恶意篡改。

  3. 统一性:这种加载模型保证了类的一致性。无论由哪个加载器加载的类,得到的都是同一个类的唯一实例。

通过双亲委派模型,Java类加载器可以形成一个层次结构,提供了更好的类加载管理和隔离机制。

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

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

相关文章

探索人类命运与宇宙奥秘的震撼之旅 豆瓣高分巨作《三体》湖北卫视开播

当思考触及宇宙的边缘&#xff0c;当人类命运与外星文明相碰撞&#xff0c;电视剧《三体》以其深邃的内涵和引人深思的故事&#xff0c;重新审视人类的过去、现在和未来&#xff0c;带我们逐步揭开地外未知文明“三体”世界的神秘面纱。根据著名科幻作家刘慈欣同名小说改编&…

HarmonyOS ArkTS 使用DevEco Studio高效开发(十三)

1、快速开始 打开IDE后&#xff0c;在IDE上边栏有个Help入口&#xff0c;里面有一个Quick Start快速开始入口&#xff0c;点击进去就会进入到快速开始面板。在这个面板中会有一些快速入门的实验指导和一些常用的链接。快速开始相当于一个收藏夹&#xff0c;把最常用的一些学习…

测试开发必备10大技能,你达标了吗?

一个人到底要走多少弯路&#xff0c;才能成为一名合格的测试开发工程师&#xff1f; 近年来&#xff0c;随着敏捷开发、微服务架构、DevOps逐渐深入人心&#xff0c;软件行业发生了翻天覆地的变化。相应地&#xff0c;软件测试行业也洗牌加剧&#xff1a; 软件测试的准入门槛&a…

Drupal XSS漏洞(CVE-2019-6341)

漏洞描述 影响软件&#xff1a;Drupal方式&#xff1a;通过文件模块或者子系统上传恶意文件触发XSS漏洞参考链接&#xff1a;Drupal 1-click to RCE 分析效果&#xff1a;JS代码执行&#xff08;Cookies 资料窃取、会话劫持、钓鱼欺骗、网页挂马等&#xff09; 漏洞环境及利用…

使用 yum 出现 Loaded plugins: fastestmirro

&#x1f4d1;前言 本文主要是使用 yum 出现 Loaded plugins: fastestmirro&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日…

2027年,人工智能(AI)用电量或相当于荷兰一年用电量 |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 2027年&#xff0c;人工智能&#xff08;AI&#xff09;用电量或相当于荷兰一…

Linux下使用Docker部署MinIO存储服务实现远程上传

&#x1f4d1;前言 本文主要是Linux下通过Docker部署MinIO存储服务实现远程上传的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#…

windows 下gcc编译的软件获取管理员权限

每次运行程序的时候需要管理员权限&#xff0c;一般可以右键管理员模式运行&#xff0c;或者在属性里设置默认管理员权限运行。但是当需要移动执行文件的位置后&#xff0c;必须重新设置管理员权限。这种操作相对来说麻烦&#xff0c;有没有一种办法直接在exe中声明呢&#xff…

YOLO的网络结构组成

YOLOv5的CSP结构是 将原输入分成两个分支&#xff0c;分别进行卷积操作使得通道数减半&#xff0c; 然后一个分支进行Bottleneck * N操作&#xff0c;然后concat两个分支&#xff0c;使得BottlenneckCSP的输入与输出是一样的大小&#xff0c;这样是为了让模型学习到更多的特征。…

单调栈:LeetCode 907. 子数组的最小值之和

907. 子数组的最小值之和 给定一个整数数组 arr&#xff0c;找到 min(b) 的总和&#xff0c;其中 b 的范围为 arr 的每个&#xff08;连续&#xff09;子数组。 由于答案可能很大&#xff0c;因此 返回答案模 10^9 7 。 思路同乘法原理 LeetCode 828. 统计子串中的唯一字符-…

爱满荣山·和美岩窝-垃圾分类趣味微课堂

在利州区民政局的支持下&#xff0c;利州社工协会在荣山镇岩窝村开展儿童垃圾分类趣味小课堂。

几款令人惊叹的原创AI写作工具

人工智能&#xff08;AI&#xff09;的应用已经深刻地渗透到我们的生活中。其中&#xff0c;AI写作领域以其年轻且迅速发展的特性备受瞩目。探索其中的几款令人惊叹的AI写作工具&#xff0c;它们的功能之酷炫&#xff0c;绝对会让你眼前一亮&#xff01; 147SEO写作&#xff1a…

餐饮店点餐外卖小程序作用是什么

要说街道上各类门店多&#xff0c;那自然当属餐饮店&#xff0c;几乎每条通人的街道旁都有大小餐饮店&#xff0c;该行业是市场经济主要支撑之一&#xff0c;从业商家和品牌都很多&#xff0c;除了小餐饮店外&#xff0c;具备一定规模的门店也不少。 在市场激烈竞争及互联网深…

YOLOv7独家原创改进: AKConv(可改变核卷积),即插即用的卷积,效果秒杀DSConv | 2023年11月最新发表

💡💡💡本文全网首发独家改进:可改变核卷积(AKConv),赋予卷积核任意数量的参数和任意采样形状,为网络开销和性能之间的权衡提供更丰富的选择,解决具有固定样本形状和正方形的卷积核不能很好地适应不断变化的目标的问题点,效果秒殺DSConv 1)AKConv替代标准卷积进行…

pytest系列——pytest-xdist插件之多进程运行测试用例|| pytest-parallel插件之多线程运行测试用例

pytest之多进程运行测试用例(pytest-xdist) 前言 平常我们功能测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟&#xff0c;如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时&#xff0c;会需要协调多个测试资源来把任务分成两…

让CHAT简单说明下软件工程师的工作性质

问CHAT&#xff1a;软件工程师的工作性质是什么&#xff1f; CHAT回复&#xff1a;软件工程师的工作性质主要包括以下几点&#xff1a; 1. 解决问题&#xff1a;软件工程师的很大一部分工作就是解决问题&#xff0c;这可能是来自客户的特定需求&#xff0c;也可能是软件开发过…

kali安装内网穿透工具并实现ssh远程连接

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh远程连接kali 1…

如何用CHAT配置linux的远程连接?

问CHAT&#xff1a;配置linux的远程连接 1.下载ssh 2.启动ssh服务 3.查看ssh服务状态 4.设置ssh服务开机自启动 5.设置windows的cmd下ssh 6.通过cmd的ssh命令远程到linux linux的ip:10.8.9.23 用户名:Li CHAT回复&#xff1a;以下是为配置Linux的远程连接的步骤说明&#xff1a…

一文读懂 | AI技术如何驱动企业供应链智能化,赋能企业降本增效?

近年以来&#xff0c;随着互联网技术的发展&#xff0c;AI的创新研究加速。随着大数据、云计算、物联网等信息技术的发展&#xff0c;以深度神经网络为代表的AI技术迅速发展&#xff0c;图像分类、语音识别、知识问答、无人驾驶等AI技术实现了从“不能用、不好用”到“可以用”…

利用广度优先或模拟解决米诺骨牌

本周推荐阅读 C二分算法&#xff1a;得到子序列的最少操作次数 题目 n 张多米诺骨牌排成一行&#xff0c;将每张多米诺骨牌垂直竖立。在开始时&#xff0c;同时把一些多米诺骨牌向左或向右推。 每过一秒&#xff0c;倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。同样…