【基础篇】五、类的双亲委派机制

news2024/11/28 9:47:47

文章目录

  • 1、双亲委派机制
  • 2、Java代码中去主动加载一个类
  • 3、“父”加载器
  • 4、Q & A
  • 5、打破双亲委派机制

1、双亲委派机制

JVM中有多个类加载器,某个类A,到底该由谁去加载 ⇒ 双亲委派机制

该机制的作用:

  • 保证类加载的安全性:避免用户自定义一个java.lang.String恶意替换JDK的核心类库里的String类
  • 避免重复加载:避免同一个类被多次加载,提高效率

该机制的内容是,当一个类加载接收到加载类的任务时:

  • 自底向上查找是否已经被父加载器加载过,有则直接返回
  • 若没被加载,再自顶向下进行加载
    在这里插入图片描述

从下往上查找是否被加载过,没有则委派给父类加载器:

在这里插入图片描述

若全都没有被加载过,则从启动类加载器开始加载,当要加载的类不在启动类加载器的加载范围时,往下走到扩展类加载器,以此类推。

这种机制的好处是:控制了加载优先级,一个类优先去由启动类加载器去尝试加载

2、Java代码中去主动加载一个类


方式一:Class.forName( ),使用当前类的加载器去加载

方式二:classLoader对象.loadClass( ),使用指定的加载器对象去加载

public class LoaderTest {
    public static void main(String[] args) throws ClassNotFoundException, IOException {
        //自己写的类
        ClassLoader classLoader = TestJvm.class.getClassLoader();
        System.out.println(classLoader);
        //尝试用应用类加载器去加载String类
        Class<?> clazz = classLoader.loadClass("java.lang.String");
        System.out.println(clazz.getClassLoader());
    }
}

运行结果的null,即说明还是用的启动类加载器加载的String,体现了双亲委派机制:

在这里插入图片描述

3、“父”加载器

双亲委派机制里的父加载器,这个父,不是Java继承的那个父,只是类加载器对象中有个成员变量叫parent,是上级关系,不是有继承关系。

在这里插入图片描述

应用程序加载器的parent属性为扩展类加载器,而扩展类加载器的parent为null,这是由于Java代码中没法拿到启动类加载器的对象,因此赋值为null。启动类加载器用c++编写,没有父加载器

在这里插入图片描述

Arthas工具查看类加载器的父子关系:

classloader -t

在这里插入图片描述

4、Q & A

Q:双亲委派机制?

A:

  • 某个类加载器加载一个类时,向上查找、向下加载,有加载过则直接返回,到顶层类加载器也没被加载过,再向下加载
  • 应用程序类加载器的父加载器是扩展类加载器,扩展类加载器的父加载器是启动类加载器,启动类加载器无父加载器
  • 好处是避免恶意替换JDK核心类以及避免重复加载
Q:如果一个类被三种类加载器都无法加载?

A:返回ClassNotFountException

Q:一个类重复出现在三个类加载器的范围,由谁来加载

A:由启动类加载器,其优先级最高

Q:自己的项目新建一个java.lang.String,能否被加载

A:否,会由启动类加载器加载JDK/rt.jar包下的String类

5、打破双亲委派机制

该机制下,向上查找、向下加载,如果有两个全类名相同的类,但内容不同,就只会有一个被加载。如Tomcat上运行多个web应用,其中两个web应用里都有com.plat.MyServlet类,则双亲委派机制下,后者不会被加载:

在这里插入图片描述

Tomcat使用了自定义类加载器来实现应用之间类的隔离。每一个应用会有一个独立的类加载器加载对应的类。

在这里插入图片描述

想打破类的双亲委派机制,方法有:

在这里插入图片描述

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

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

相关文章

VMvare虚拟机中文件夹共享防火墙设置

目录 一、虚拟机jdk及tomcat配置 1.1 JDK配置 1.2 tomcat配置 二、文件夹共享 2.1 为什么需要配置文件夹共享功能 2.2 高级共享和普通共享 三、防火墙设置 入站规则和出站规则 四、思维导图 一、虚拟机jdk及tomcat配置 1.1 JDK配置 (1) 双击jdk &#xff08;2&#xf…

个体诊所软件方案,农村医疗服务站社区门诊电子处方管理系统软件教程

个体诊所软件方案&#xff0c;农村医疗服务站社区门诊电子处方管理系统软件教程 一、软件程序问答 1、处方单软件有病历汇总吗 如下图&#xff0c;软件以 佳易王电子处方软件V17.2版本为例说明 点击 病历汇总统计 按钮&#xff0c; 可以按明细查询或病历汇总查询&#xf…

交通 | 司乘匹配:基于增量成本计算的优化算法

编者按&#xff1a; 司乘匹配是打车服务中一项至关重要的任务&#xff0c;如果这一步做得不够优化&#xff0c;可能导致乘客需要更长的时间才能到达目的地&#xff0c;同时司机的收入也会因此减少。由于司乘匹配是一个持续进行的过程&#xff0c;每一时刻都在不断涌入新的打车…

MD5算法

一、引言 MD5&#xff08;Message-Digest Algorithm 5&#xff09;是一种广泛应用的密码散列算法&#xff0c;由Ronald L. Rivest于1991年提出。MD5算法主要用于对任意长度的消息进行加密&#xff0c;将消息压缩成固定长度的摘要&#xff08;通常为128位&#xff09;。在密码学…

微信小程序开发系列-11组件间通信02

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》 《微信小程序开发系列-02注册小程序》 《微信小程序开发系列-03全局配置中的“window”和“tabBar”》 《微信小程序开发系列-04获取用户图像和昵称》 《微信小程序开发系列-05登录小程序》 《…

图文证明 等价无穷小替换

等价无穷小替换 定义 等价无穷小是无穷小之间的一种关系&#xff0c;指的是&#xff1a;在同一自变量的趋向过程中&#xff0c;若两个无穷小之比的极限为1&#xff0c;则称这两个无穷小是等价的。无穷小等价关系刻画的是两个无穷小趋向于零的速度是相等的。 设当 x → x 0 时…

[python]matplotlib

整体图示 .ipynb 转换md时候图片不能通知携带&#xff0c;所有图片失效&#xff0c;不过直接运行代码可以执行 figure figure,axes与axis import matplotlib.pyplot as plt figplt.figure() fig2plt.subplots() fig3,axsplt.subplots(2,2) plt.show()<Figure size 640x480 …

大数据 - Hadoop系列《二》- Hadoop组成

目录 &#x1f436;3.1 hadoop组成 &#x1f436;3.1 HDFS 架构概述 1. NameNode&#xff08;nn&#xff09;&#xff1a; ​编辑2. DataNode(dn)&#xff1a; 3. Secondary NameNode(2nn)&#xff1a; &#x1f436;3.2 YARN 架构概述 &#x1f436;3.3 MapReduce 架构…

Vue Tinymce富文本组件添加自定义字体项

实现效果如下&#xff1a; Tinymce 组件进行字体设置 设置完后&#xff0c;就可以使用自定义的字体了。

[Mac软件]ColorWell For Mac 7.4.0调色板生成器

美丽而直观的调色板和调色板生成器是任何Web或应用程序开发人员工具包的必要补充&#xff01; 创建无限数量的调色板&#xff0c;快速访问所有颜色信息和代码生成&#xff0c;用于应用程序开发&#xff0c;非常简单。可编辑调色板数据库允许您存档和恢复任何调色板&#xff0c…

Django 学习教程-介绍与安装

系列 Django 学习教程- Hello world入门案例-CSDN博客 介绍 Django 是一个由 Python 编写用于Web 应用程序开发的高级 Python Web 框架 Django 提供了一套强大的工具&#xff08;无需重新发明轮子&#xff09;&#xff0c;使得开发者能够快速构建 Web 网站。 Django 采用了…

在线课程学习管理

### 起步1. 使用 IDEA 导入项目 2. 执行 sql 目录下的online_study_system.sql 文件 3. 修改 mysql.properties 中数据库连接信息 4. 运行程序| 用户名| 密码 | | ------------- |:-------------| | admin | 123 | | 李老师 | 123 | | 张老师 | 123 | | 刘老师 | 123 | | 曹老师…

javaWeb商城2

一、家居电子商城 线上电子商城系统&#xff0c;主要实现了用户注册&#xff0c;登录、浏览&#xff0c;查看家居商品信息&#xff0c;购物车&#xff0c;订单&#xff0c;支付&#xff0c;查看通知以及管理员对用户信息的管理&#xff0c;订单管理&#xff0c;商品管理&#…

基于Java SSM框架实现医院挂号系统项目【项目源码+论文说明】

基于java的SSM框架实现医院挂号上班打卡系统演示 摘要 在网络发展的时代&#xff0c;国家对人们的健康越来越重视&#xff0c;医院的医疗设备更加先进&#xff0c;医生的医术、服务水平也不断在提高&#xff0c;给用户带来了很大的选择余地&#xff0c;而且人们越来越追求更个…

给零基础朋友的编程课09 上集 - 代码

给零基础朋友的编程课09 上 - 矩形、曲线、文字、案例5讲解 上_哔哩哔哩_bilibili 上半Code: / // 彩色案例 艺术仿制品4 // /// 色表 // // 238,150,43 橙 // 229,207,192 暖灰 // 204,50,47 暗红// 项目设定 size(825, 984); // 设置画布(窗口)尺寸 background(…

主成分分析(PCA):探索数据的核心

文章目录 前言1. 什么是 PCA &#xff1f;2. PCA 的原理2.1 协方差和方差2.2 核心思想2.3 步骤 3. PCA 的应用场景4. PCA 的优缺点5. 示例&#xff1a;人脸识别5.1 完整代码5.2 运行结果 结语 前言 当今社会&#xff0c;数据无处不在。从社交媒体到金融交易&#xff0c;从医疗…

SpringBoot快速集成多数据源(自动版)

有些人因为看见所以相信&#xff0c;有些人因为相信所以看见 有目录&#xff0c;不迷路 前期准备实现演示参考 最近研究了一下多数据源&#xff0c;这篇博客讲的是简单模式&#xff0c;下篇博客预计写自动切换模式 前期准备 本篇博客基于SpringBoot整合MyBatis-plus&#xff0…

IBM介绍?

IBM&#xff0c;全名国际商业机器公司&#xff08;International Business Machines Corporation&#xff09;&#xff0c;是一家全球知名的美国科技公司。它成立于1911年&#xff0c;总部位于美国纽约州阿蒙克市&#xff08;Armonk&#xff09;&#xff0c;是世界上最大的信息…

通过国家网络风险管理方法提供安全的网络环境

印度尼西亚通过讨论网络安全法草案启动了其战略举措。不过&#xff0c;政府和议会尚未就该法案的多项内容达成一致。另一方面&#xff0c;制定战略性、全面的网络安全方法的紧迫性从未像今天这样重要。 其政府官方网站遭受了多起网络攻击&#xff0c;引发了人们对国家网络安全…

PiflowX组件-JDBCWrite

JDBCWrite组件 组件说明 使用JDBC驱动向任意类型的关系型数据库写入数据。 计算引擎 flink 有界性 Sink: Batch Sink: Streaming Append & Upsert Mode 组件分组 Jdbc 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默…