分布式微服务系统架构第106集:jt808,补充类加载器

加群联系作者vx:xiaoda0423

仓库地址:https://webvueblog.github.io/JavaPlusDoc/

https://1024bat.cn/

类加载器

类与类加载器

判断类是否“相等”

任意一个类,都由加载它的类加载器和这个类本身一同确立其在 Java 虚拟机中的唯一性,每一个类加载器,都有一个独立的类名称空间。

因此,比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个 Class 文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那么这两个类就必定不相等。

这里的“相等”,包括代表类的 Class 对象的 equals() 方法、isInstance() 方法的返回结果,也包括使用 instanceof 关键字做对象所属关系判定等情况。

加载器种类

系统提供了 3 种类加载器:

  • 启动类加载器(Bootstrap ClassLoader): 负责将存放在 <JAVA_HOME>\lib 目录中的,并且能被虚拟机识别的(仅按照文件名识别,如 rt.jar,名字不符合的类库即使放在 lib 目录中也不会被加载)类库加载到虚拟机内存中。

  • 扩展类加载器(Extension ClassLoader): 负责加载 <JAVA_HOME>\lib\ext 目录中的所有类库,开发者可以直接使用扩展类加载器。

  • 应用程序类加载器(Application ClassLoader): 由于这个类加载器是 ClassLoader 中的 getSystemClassLoader() 方法的返回值,所以一般也称它为“系统类加载器”。它负责加载用户类路径(classpath)上所指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。


ClassLoader

当然,如果有必要,还可以加入自己定义的类加载器。

双亲委派模型

什么是双亲委派模型

双亲委派模型是描述类加载器之间的层次关系。它要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。(父子关系一般不会以继承的关系实现,而是以组合关系来复用父加载器的代码)

工作过程

如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(找不到所需的类)时,子加载器才会尝试自己去加载。

在 java.lang.ClassLoader 中的 loadClass 方法中实现该过程。

为什么使用双亲委派模型

像 java.lang.Object 这些存放在 rt.jar 中的类,无论使用哪个类加载器加载,最终都会委派给最顶端的启动类加载器加载,从而使得不同加载器加载的 Object 类都是同一个。

相反,如果没有使用双亲委派模型,由各个类加载器自行去加载的话,如果用户自己编写了一个称为 java.lang.Object 的类,并放在 classpath 下,那么系统将会出现多个不同的 Object 类,Java 类型体系中最基础的行为也就无法保证。

平台通用应答

消息ID: 0x8001

消息体:每个不同的命令消息体格式内容由各命令确定

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

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

相关文章

利用 pyecharts 实现地图的数据可视化——第七次人口普查数据的2d、3d展示(关键词:2d 、3d 、map、 geo、涟漪点)

参考文档&#xff1a;链接: link_pyecharts 官方文档 1、map() 传入省份全称&#xff0c;date_pair 是列表套列表 [ [ ],[ ] … ] 2、geo() 传入省份简称&#xff0c;date_pair 是列表套元组 [ ( ),( ) … ] 1、准备数据 population_data&#xff1a;简称经纬度 population_da…

Enovia许可释放

随着企业规模的扩大和业务的不断增长&#xff0c;Enovia许可证的管理变得至关重要。在许多情况下&#xff0c;企业可能面临许可证资源浪费或不足的问题。为了解决这一问题&#xff0c;Enovia提供了许可释放功能&#xff0c;帮助企业更加灵活地管理和使用许可证资源。本文将介绍…

每日一道leetcode(回来了!!!)

236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足…

【Redis】布隆过滤器应对缓存穿透的go调用实现

布隆过滤器 https://pkg.go.dev/github.com/bits-and-blooms/bloom/v3 作用&#xff1a; 判断一个元素是不是在集合中 工作原理&#xff1a; 一个位数组&#xff08;bit array&#xff09;&#xff0c;初始全为0。多个哈希函数&#xff0c;运算输入&#xff0c;从而映射到位数…

【ROS2】行为树 BehaviorTree(四):组合使用子树

1、大树调用子树 如下图,左边为大树主干: 1)如果门没有关,直接通过; 2)如果门关闭了,执行开门动作,然后通过 右边为子树,主要任务是开门 1)尝试直接开门; 2)尝试开锁开门,最多尝试5次; 3)最后尝试砸门! XML如何描述大树主干调佣子树:使用关键字 SubTree 来…

【口腔粘膜鳞状细胞癌】文献阅读

写在前面 看看文章&#xff0c;看看有没有思路 文献 The regulatory role of cancer stem cell marker gene CXCR4 in the growth and metastasis of gastric cancer IF:6.8 中科院分区:1区 医学WOS分区: Q1 目的&#xff1a;通过 scRNA-seq 结合大量 RNA-seq 揭示癌症干细胞…

【ComfyUI】蓝耘元生代 | ComfyUI深度解析:高性能AI绘画工作流实践

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能&#xff08;AI&#xff09;通过算法模拟人类智能&#xff0c;利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络&#xff08;如ChatGPT&…

深入理解Java中的队列:核心操作、实现与应用

队列&#xff08;Queue&#xff09;是计算机科学中最基础且重要的数据结构之一&#xff0c;遵循 先进先出&#xff08;FIFO&#xff09; 的规则。Java通过java.util.Queue接口及其丰富的实现类为开发者提供了强大的队列工具。本文将详细解析Java队列的核心操作、常见实现类及其…

idea里面不能运行 node 命令 cmd 里面可以运行咋回事啊

idea里面不能运行 node 命令 cmd 里面可以运行咋回事啊 在 IntelliJ IDEA&#xff08;或其他 JetBrains 系列 IDE&#xff09;中无法运行某些命令&#xff0c;但在系统的命令提示符&#xff08;CMD&#xff09;中可以正常运行&#xff0c;这种情况通常是由于以下原因之一导致的…

Express学习笔记(六)——前后端的身份认证

目录 1. Web 开发模式 1.1 服务端渲染的 Web 开发模式 1.2 服务端渲染的优缺点 1.3 前后端分离的 Web 开发模式 1.4 前后端分离的优缺点 1.5 如何选择 Web 开发模式 2. 身份认证 2.1 什么是身份认证 2.2 为什么需要身份认证 2.3 不同开发模式下的身份认证 3. Sessio…

微服务与Spring Cloud Alibaba简介

微服务&#xff08;或微服务架构&#xff09;是一种云原生架构方法&#xff0c;其中单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成。本单元主要介绍微服务架构的定义、微服务的特征、微服务架构面临的挑战、Spring Cloud 定义、Spring Cloud 核心组件、Spring C…

JPG同步删除RAW批处理文件

相机挑选JPG照片&#xff0c;同步删除RAW格式文件&#xff0c;批处理文件bat&#xff0c;放到JPG和NEF文件夹根目录 – NEF 文件夹 – JPG 文件夹 文件同步删除.bat echo off:: 要同步的文件夹及文件后缀名&#xff08;相同&#xff09;&#xff0c;即要删除文件的目录 set de…

InnoDB的MVCC实现原理?MVCC如何实现不同事务隔离级别?MVCC优缺点?

概念 InnoDB的MVCC&#xff08;Multi-Version Concurrency Control&#xff09;即多版本并发控制&#xff0c;是一种用于处理并发事务的机制。它通过保存数据在不同时间点的多个版本&#xff0c;让不同事务在同一时刻可以看到不同版本的数据&#xff0c;以此来减少锁竞争&…

针对 Java从入门到精通 的完整学习路线图、各阶段技术点、CTO进阶路径以及经典书籍推荐。内容分阶段展开,兼顾技术深度与职业发展

以下是针对 Java从入门到精通 的完整学习路线图、各阶段技术点、CTO进阶路径以及经典书籍推荐。内容分阶段展开&#xff0c;兼顾技术深度与职业发展。 一、学习路线图分阶段详解 阶段1&#xff1a;Java基础入门&#xff08;3-6个月&#xff09; 目标&#xff1a;掌握Java核心…

报错:Nlopt

报错&#xff1a;Nlopt CMake Error at TGH-Planner/fast_planner/bspline_opt/CMakeLists.txt:20 (find_package):By not providing "FindNLopt.cmake" in CMAKE_MODULE_PATH this project hasasked CMake to find a package configuration file provided by "…

鸿蒙公共通用组件封装实战指南:从基础到进阶

一、鸿蒙组件封装核心原则 1.1 高内聚低耦合设计 在鸿蒙应用开发中&#xff0c;高内聚低耦合是组件封装的关键准则&#xff0c;它能极大提升代码的可维护性与复用性。 从原子化拆分的角度来看&#xff0c;我们要把复杂的 UI 界面拆分为基础组件和复合组件。像按钮、输入框这…

Linux 网络基础二 ——应用层HTTP\HTTPS协议

我们程序员写的一个个解决我们实际问题&#xff0c;满足我们日常需求的网络程序&#xff0c;都是在应用层。 前面写的套接字接口都是传输层经过对 UDP 和 TCP 数据发送能力的包装&#xff0c;以文件的形式呈现给我们&#xff0c;让我们可以进行应用层编程。换而言之&#xff0c…

Spark-SQL

Spark-SQL 概述 Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块 Shark 是伯克利实验室 Spark 生态环境的组件之一&#xff0c;是基于 Hive 所开发的工具&#xff0c;它修改了内存管理、物理计划、执行三个模块&#xff0c;并使之能运行在 Spark 引擎上…

Java 在人工智能领域的突围:从企业级架构到边缘计算的技术革新

一、Java AI 的底层逻辑&#xff1a;从语言特性到生态重构 在 Python 占据 AI 开发主导地位的当下&#xff0c;Java 正通过技术重构实现突围。作为拥有 30 年企业级开发经验的编程语言&#xff0c;Java 的核心优势在于强类型安全、内存管理能力和分布式系统支持&#xff0c;这…

编程实现除法程序时需要注意的细节

使用Python实现除法程序时&#xff0c;需注意以下关键细节&#xff1a; 除数为零的处理 必须检查除数是否为零&#xff0c;否则会触发ZeroDivisionError异常。可通过try-except结构捕获异常并处理。 整数除法与浮点数除法的区别 • 使用/运算符时&#xff0c;无论操作数是否为…