双亲委派机制总结
回顾了一下双亲委派机制,在这记录记录,下一篇会基于打破双亲委派机制来更新
1. 类加载:
多个java文件经过编译打包后生成可运行jar包,最后启动程序。首先需要通过类加载器把主类加载到JVM。主类在运行过程中如果使用到其他类,会逐步加载这些类。(jar包里的类不是一次性全部加载的,是使用到时才加载的)
类加载到使用过程步骤:
加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载
加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载;
验证:校验字节码文件的正确性;
准备:给类的静态变量分配内存,并赋予默认值;
解析:将符号引用替换为直接引用,会把一些静态方法替换为指向数据所存内存的指针或句柄等(直接引用),这是静态链接过程;动态链接是在程序运行期间完成的将符号引用替换为直接引用。
初始化:对类的静态变量初始化为指定的值,执行静态代码块。

2.类加载器和双亲委派机制
类加载器包括有:启动类加载器,扩展类加载器,应用类加载器,自定义类加载器
主要是:
启动类加载器(bootstrap class loader):基于C++实现,负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,比如rt.jar等;
扩展类加载器(ExtClassLoader):负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包
应用类加载器(AppClassLoader):负责加载ClassPath路径下的类包,主要就是加载你自己写的那些类
自定义加载器:负责加载用户自定义路径下的类包
自定义一个类加载器:
自定义类加载器需要继承java.lang.ClassLoader 类,这个类有两个核心方法,一个是loadClass(String,boolean),实现了双亲委派机制,大概逻辑为:
1. 首先,检查一下指定名称的类是否已经加载过,如果加载过了,就不需要再加载,直接返回。
2. 如果此类没有加载过,那么,再判断一下是否有父加载器;如果有父加载器,则由父加载器加载(即调用parent.loadClass(name, false);).或者是调用bootstrap类加载器来加载。
3. 如果父加载器及bootstrap类加载器都没有找到指定的类,那么调用当前类加载器的findClass方法来完成类加载。
还有一个方法是findClass,默认实现是抛出异常,所以自定义类加载器主要是重写findClass()方法。

双亲委派机制:
JVM类加载器有亲子层级结构:

双亲委派机制说简单点就是,先找父亲加载,不行再由儿子自己加载。
我在自己实验过程中发现,当我删除classpath下编译的类时,通过自定义类加载器加载我指定路径的类文件,打印出为我自己的类加载器加载;当我将classpath下的该类复原时,再次打印类加载器时,返回的则是应用类加载器了,说明双亲委派机制的加载层级关系。
为什么设计双亲委派机制呢?
- 沙箱安全机制:自己编写的String类不会被加载,可以防止核心API库被随意篡改;
- 避免类的重复加载:当父类已经加载了该类时,就没有必要子类加载器再次加载一次,保证被加载类的唯一性。
打破双亲委派机制:
例如tomcat:在webapp下存在多个项目时,所加载的是单独隔离的,每个webappClassLoader加载自己的目录下的class文件,不会传递给父类加载器,打破了双
亲委派机制。
tomcat的几个主要类加载器:
commonLoader:Tomcat最基本的类加载器,加载路径中的class可以被Tomcat容器本身以及各个Webapp访问;
catalinaLoader:Tomcat容器私有的类加载器,加载路径中的class对于Webapp不可见;
sharedLoader:各个Webapp共享的类加载器,加载路径中的class对于所有Webapp可见,但是对于Tomcat容器不可见;
WebappClassLoader:各个Webapp私有的类加载器,加载路径中的class只对当前Webapp可见;
实现打破双亲委派机制,在原来重写findClass基础上,对于加载类loadClass方法进行重写,取出双亲委派部分。
相关文章:
双亲委派机制总结
回顾了一下双亲委派机制,在这记录记录,下一篇会基于打破双亲委派机制来更新 1. 类加载: 多个java文件经过编译打包后生成可运行jar包,最后启动程序。首先需要通过类加载器把主类加载到JVM。主类在运行过程中如果使用到其他类&a…...
C语言数据结构基础————二叉树学习笔记(四)简单的OJ题目练习
1.单值二叉树 965. 单值二叉树 - 力扣(LeetCode) 建立一个新的函数,用函数传参的方法来记录val的值 如上一篇最后的对称二叉树的习题,建立新的函数来传参 多采用使用反对值的方法,因为如果是相等return true的话&am…...
protobuf学习笔记(一):生成一个比较综合的message
一年前学过对应的知识,终究是太潦草了,这几天网上学习了一下,重新写一下笔记。这里是protobuf和golang的结合 一、protobuf protobuf实际上是一种类似json和gob之类的数据格式,也是grpc的御用格式吧(有自己的优势&am…...
[BT]BUUCTF刷题第8天(3.26)
第8天 Web [CISCN2019 华北赛区 Day2 Web1]Hack World 题目明确提示flag在flag表里的flag列,这里先尝试1 返回:你好,glzjin想要一个女朋友。 再尝试1,返回bool(false) 到这里就感觉是布尔盲注的题目类型了(虽然我没…...
【前端】-
相对路径和绝对路径是描述文件位置的两种方式。 1. 相对路径:相对于自己的目标文件的位置,以引用文件之间网页所在位置为参考基础,而建立出的目录路径。因此,当保存于不同目录的网页引用同一个文件时,所使用的路径将不…...
uniapp安装axios
先npm安装 npm i axios然后在项目里面建一个utils文件,再建一个index.js 以下是index.js代码: import axios from axios; const service axios.create({baseURL: //xxxx.xxxxx.com///你的请求接口域名, timeout: 6000, // request timeoutcrossDomai…...
基于javaweb宠物领养平台管理系统设计和实现
基于javaweb宠物领养平台管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源码联…...
网络问题排查方案
PC上不了网初步排查方案步骤 首先查看配置是否正确,是否使用自动获取(DHCP)IP,掩码,网关,如果不是,手动配置确认网关,子网掩码,IP是否配置正确,IP是否已有PC使…...
【CMake】所见所闻所学
Note: 本贴仅记录遇到的CMake的问题,以问题为驱动。 - cmake_minimum_required - project - add_executable - target_include_directories - ExternalProject_Add ExternalProject_Add 是 CMake 中用于管理和构建外部项目的模块。通过 ExternalProject_Add&…...
Linux shell脚本切换为root用户执行命令
首先安装expect。 sudo apt install expect 创建shell脚本文件,示例内容如下: #!/usr/bin/expectspawn su rootexpect {"密码:" {send "00000\r"}"Password:" {send "000000\r"}}send "./…...
儿童护眼灯哪个牌子好?盘点五款满分护眼台灯
为人父母以后,守护孩子的健康成了首要任务。随着孩子慢慢长大,课程的增多,作业也随之增加起来。很多孩子从放学回家就开始伏案在桌子上写作业,哪怕天色逐渐变暗,孩子作业仍旧未写完,作为父母的我们不得不担…...
HangZhou Java Journey P1
Java程序运行时类加载机制 下面是对这个流程的详细说明: JVM启动:当Java程序开始执行时,JVM首先启动。JVM的启动涉及到操作系统级别的进程创建和资源分配。 Bootstrap ClassLoader:JVM启动后,首先会初始化Bootstrap …...
fiddler过滤器使用,隐藏图片、js、css请求
如果抓包过程中不想查看图片、js、css请求,或者只想抓某个ip或者某个网页下的请求,可以在过滤器中设置。 (1)没有开启过滤器 可以看出所有的请求都会抓取,cs、js、图片请求都有 (2)开启过滤器 …...
HTML基础:8个常见表单元素的详解
你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端程序媛。 后台回复“前端工具”可免费获取开发工具,持续更新。 今天来说说 HTML 表单。它是用于收集用户输入信息的元素集合。例如文本框、单选按钮、复选框、下拉列表等。 用户经常填写的表…...
密码学之哈希碰撞和生日悖论
哈希碰撞 哈希碰撞是指找到两个不一样的值,它们的哈希值却相同 假设哈希函数的取值空间大小为k ,计算次数为n 先算每个值不一样的概率P’ 所以至少两个值相同(即存在哈希碰撞)的概率P为 生日悖论 假设班里有50个人,求班里至少两个人相同…...
SpringBoot + Redis + Lua = 王炸!
经有一位魔术师,他擅长将Spring Boot和Redis这两个强大的工具结合成一种令人惊叹的组合。他的魔法武器是Redis的Lua脚本。 今天,我们将揭开这个魔术师的秘密,探讨如何在Spring Boot项目中使用Lua脚本,以解锁新的可能性和提高性能…...
【Python】搭建 Python 环境
目 录 一.安装 Python二.安装 PyCharm 要想能够进行 Python 开发,就需要搭建好 Python 的环境 需要安装的环境主要是两个部分: 运行环境: Python开发环境: PyCharm 一.安装 Python (1) 找到官方网站 (2) 找到下载页面 选择 “Download for Windows”…...
NVIDIA 发布 Project GR00T 人形机器人基础模型和 Isaac 机器人平台重大更新
系列文章目录 前言 Isaac 机器人平台现可为开发者提供全新的机器人训练仿真器、Jetson Thor 机器人计算机、生成式 AI 基础模型和由 CUDA 加速的感知和操作库。 Project GR00T 是一种多模态人形机器人通用基础模型,作为机器人的大脑,使它们能够学习技能…...
05.循环
格式: 05.循环 01.循环语句02.while循环1.1while循环1.2.死循环1.3 while循环应用 计算123。。。100的和 03.for循环(迭代循环)3.1 基本格式3.2 range() 04.break和continue关键字4.1 break4.2 continue 01.循环语句 02.while循环 03.for循环…...
Git 分布式版本控制系统基本概念和操作命令
目录 Git 基本概念 功能特点 工作流程 操作命令 新建代码库 配置 增删文件 代码提交 分支 标签 查看信息 远程同步 撤销 其他 小结 Git Git 是一个开源的分布式版本控制系统,用于跟踪文件的变更历史。它最初由 Linux Torvalds 设计,用于…...
ABAQUS结果导出太麻烦?试试这个隐藏技巧,5分钟搞定截面节点应力数据到Excel
ABAQUS结果导出效率革命:5分钟精准捕获截面节点数据的全流程指南 在结构仿真分析领域,数据后处理往往消耗工程师40%以上的工作时间。当我第一次面对ABAQUS中复杂的应力云图,试图提取某个螺栓连接面的节点应力数据时,整整浪费了两天…...
hoverboard-firmware-hack-FOC终极兼容性指南:STM32F103RCT6与GD32F103RCT6深度对比
hoverboard-firmware-hack-FOC终极兼容性指南:STM32F103RCT6与GD32F103RCT6深度对比 【免费下载链接】hoverboard-firmware-hack-FOC With Field Oriented Control (FOC) 项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC 想…...
量子Krylov子空间算法与经典阴影技术解析
1. 量子Krylov子空间算法原理与实现量子Krylov子空间算法是当前NISQ(含噪声中等规模量子)时代最具前景的量子-经典混合算法之一。其核心思想是通过构造一组Krylov基矢{|ψₖ⟩} {|ψ₀⟩, H|ψ₀⟩, H|ψ₀⟩,..., H^(d-1)|ψ₀⟩},将高维希…...
给老系统装一层 “能办事的 AI”:企业 Agent 卡住的最后一步,SkillsUI 想补上
让我们从一个所有做企业 Agent 的人都遇到过的具体场景说起。某券商风控员要给客户开通融资融券账户,传统流程是这样的:登录 OA 提风控审批 → 跳到 CRM 拉客户资料 → 跳到风控系统填评估表 → 跳到电子签平台发签约链接 → 回 OA 关单。十几个字段反复…...
我见过最聪明的技术人,都在偷偷培养这3种“非技术能力”
在软件测试行业摸爬滚打这些年,我见过太多天赋异禀的技术从业者:有人能一夜吃透新的自动化测试框架,有人能对着流量日志半小时定位出隐藏半年的内存泄漏问题,有人能把性能测试指标优化到远超行业标准。可几年过去,真正…...
良心盘点!2026AI写作辅助软件榜单(覆盖 99% 毕业论文需求)
本文精选13 款2026 年实测 AI 论文工具,按全流程全能型、垂直领域专精型、润色降重专家、文献管理助手四大类别排序,覆盖从选题到定稿全链路,适配本科 / 硕博 / 期刊全场景,附选型速查表与避坑指南,帮你快速找到最佳拍…...
2026这6款宝藏降AIGC平台大起底,一键把AI检测率精准控到安全区!
步入 2026 年,学术圈的风向早已不是过去那个简单的“降重”时代。随着 AI 技术的迅猛发展,论文查重系统不断升级,高校对 AI 生成内容的审查标准也愈发严苛。曾经只需关注重复率的你,现在却要面对更复杂、更隐蔽的 AIGC 检测压力。…...
TI MSPM0G3105-Q1汽车MCU实战解析:从核心特性到硬件设计
1. 项目概述:为什么是MSPM0G3105-Q1?在汽车电子和工业控制领域摸爬滚打十几年,我经手过的MCU型号少说也有几十款。每次启动一个新项目,选型都是头等大事,它直接决定了后续开发的难易度、系统的稳定性和最终产品的成本。…...
医用超声图像干扰处理方法:原理、技术与实践
引言 超声成像作为一种无创、实时、无辐射的医学影像技术,在临床诊断中发挥着至关重要的作用。然而,超声图像在采集过程中极易受到各种物理和电子干扰,导致图像质量下降,影响医生的诊断准确性。常见的干扰包括斑点噪声、混响伪影、声影、镜面伪影以及由患者呼吸、运动引起…...
深入理解 Java 反射机制(Reflection)
一句话先给答案反射 在程序运行时,动态获取类的信息并动态操作对象的能力。正常编程:类 → 对象 → 调用方法 反射:未知类 → 运行时拿到类结构 → 创建对象 / 调用方法 / 访问属性一、为什么需要反射?(先解决动机&am…...
