一文轻松搞懂 类加载机制 --【双亲委派机制】执行过程(类信息获取,加载)

Bartender 2021破解版安装教程:手把手教你从下载到激活(附详细步骤图) 本文详细介绍了BarTender 2021专业版的安装与高效应用指南,从基础配置到高级条码设计,帮助用户快速掌握标签设计与打印技术。内容涵盖安装步骤、标签模板创建、数据连接与批量打印技巧,以及高级功能如安全策略与自动化集成,适合零售、物流、制造等行业用户提升工作效率。 阅读详情

前置

首先我们需要知道双亲委派机制是一个 类加载机制,这里我们需要知道一些 JVM 的知识。

 Java 是一门 编译类语言,所编写的 .java文件 会被 编译成 .class文件。那么在我们的 Java程序执行时,运行时数据区的方法区就会获取到对应的类信息:

方法区作用:一般用于存储常量、静态变量、类信息、即时编译器编译后的机器码、运行时常量池等数据。是一个线程共享的 JVM 内存区域。

 而我们的发生的类加载是在 类装载器 里发生的,里面的一共分为三部:

1、加载

这里也就是双亲委派机制进行的地方。

我们的类加载会从 Application class Loader 开始往上进行检测,如果此类已经加载就不进行加载了

注意此时会先判断是否加载过这个类,如果加载过,则进行返回。

否则将委派给父类进行加载,而不会自行进行加载。如果父类在他负责的范围没有加载到改类,才往下进行加载。

所以类加载依次会从以下顺序开始进行加载,如果没有找到对应的类,则往下进行查找

  • BootStrap class Loader 启动类加载器

这里主要加载支撑 JVM 运行的位于JRE 的 lib 目录下的核心类库,比如 rt.jar、charsets.jar 等

  • Extension class Loader 扩展类加载器

加载支撑 JVM 运行的位于 JRE 的 lib 目录下的 ext扩展目录中的JAR类包

  • Application class Loader 应用程序加载器

加载 ClassPath 路径下的类包,主要就是加载我们自己编写的类

面试题:tomcat 是如何打破双亲委派机制的呢?

当然在 tomcat 里使用 的是自定义类加载器(WebAppClassLoader),也是一个类。这里是因为如果两个应用都有同包同名的类,那么会出现的一个问题就是:一个类在加载之后,另外一个类就加载不到了。

那么为什么自定义类加载器能够 打破双亲委派机制 呢?

JVM 判断一个类是否已经加载过时通过 类 + 类加载器实例 来实现,如果是两个不同的类加载器,是可以将两个类加载到对应的两个 APP 的。

如果在各种类加载器都没有找到指定的类,就会报一个比较经典的异常ClassNotFoundException

2、链接

这里又分为三小步

  • 验证

首先会对加载的类进行验证class文件是否正确,比如验证文件格式

  • 准备

这里会为 static变量分配内存并赋零值 ,比如类里定义了个静态变量 static int a =  10; 在分配空间后,首先会赋上 0 值,在后面步骤中才赋上 10。

  • 解析

将符号引用解析为直接引用

3、初始化

在这个阶段就会为刚才的静态变量进行赋值操作

为什么要有双击委派机制?

双亲委派机制的 目的 也是为了保护 Java底层 的一些类,防止提供 基础服务的类 被篡改而造成的一系列不可预料的问题。

速腾RS-LiDAR-16激光雷达ROS环境搭建与点云可视化实战指南 本文提供速腾RS-LiDAR-16激光雷达在ROS环境下的完整搭建与可视化实战指南。从硬件连接、网络配置、驱动安装编译,到核心参数详解与Rviz点云可视化,手把手解决IP设置、坐标系对齐等常见问题,帮助开发者快速实现激光雷达三维点云数据的采集与显示。 阅读详情

相关推荐

扫地机器人:从仿真到决策,一个完整SLAM导航系统的自研之路

本文详细记录了从零开始自研扫地机器人SLAM导航系统的全过程,涵盖ROS-Gazebo仿真系统搭建、地图预处理优化、全覆盖规划算法迭代等关键技术。通过三次算法升级,最终实现92%的清洁效率,并分享DWA调参、状态机设计等实战经验,为开发者提供从仿真到落地的完整解决方案。

weixin_29053695的博客 352

双亲委派机制详解

双亲委派,就是按照类加载器的层级关系,逐层进行委派。

alone_song的博客 810

智能驾驶功能软件平台设计规范 第一部分:系统架构

智能驾驶功能软件平台设计规范 第一部分:系统架构2020-07-29 发布。

爱是与世界平行 6742

双亲委派机制

java里面的双亲委派机制

qq_35368296的博客 934

从“要啥”到“咋测”:手把手拆解Aspice SWE.1需求分析,为你的车载/嵌入式项目避坑

本文深入解析Aspice SWE.1需求分析在车载/嵌入式项目中的关键作用,帮助开发者将模糊的系统需求转化为可执行、可验证的软件需求。通过实战案例和结构化方法,详细拆解功能需求原子化、非功能需求工程化表达等核心技巧,为项目避坑提供实用指南。

weixin_31682031的博客 257

一款值得关注的开源企业管理ERP系统

盒木ERP是一款开源的现代化企业管理系统,采用前后端分离架构,后端基于Python+Django,前端使用Vue+Ant Design。系统涵盖采购、销售、库存、财务等核心业务模块,支持移动端操作和PDA扫码。具有开源免费、技术先进、功能完善等特点,适合中小企业使用或二次开发。项目提供详细部署指南,支持Docker容器化部署,是学习ERP系统开发和企业数字化转型的优秀选择。

1104

JVM类加载和双亲委派机制

当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把类加载到JVM,本文主要说明类加载机制和其具体实现双亲委派模式。

yangnk的技术记录 614

手把手教你用运放和基准源,把±10V信号变成ADC能吃的0-4V(附完整计算过程)

本文详细介绍了如何利用OP07运放和REF5040基准源设计工业级信号调理电路,将±10V传感器信号转换为0-4V ADC可接受范围。通过七步流程,包括需求分析、元器件选型、电路设计、理论计算、PCB布局、实测验证与性能优化,帮助工程师解决信号不匹配问题,提升系统精度与稳定性。

weixin_28731223的博客 466

类加载器 双亲委派

防止核心API库被随意篡改。比如有一个要加载java.lang.Integer类的请求,通过双亲委派进制加载传递到启动类加载器,在在核心Java API发现这个名字的类,发现该类已被加载,并不会重新加载传递的过来的java.lang.Integer,而直接返回已加载过的Integer.class,可以防止核心API被随意篡改。通俗的讲就是在某个特定的类加载器接到加载类请求时,先寄托给父加载器加载,依次递归,如果父加载器可以加载时则成功返回,如果不可以加载就自己去加载。

qq_42042621的博客 210

番茄(西红柿)叶片病害检测数据集:12k+图像,10类,yolo标注

本文介绍了包含12,250张图像的番茄叶片病害检测数据集,涵盖10种常见病害类型及健康叶片,采用YOLO格式标注。数据集具有三大核心价值:科研层面填补病害样本空白,推动算法创新;产业应用支持精准诊断、早期预警,降低损失20-40%;社会生态方面减少农药使用15-30%,助力绿色农业。该数据集作为AI与农业结合的数字基础设施,适用于计算机视觉项目、科研实验等场景。

m0_73878864的博客 1131

手把手教你学simulink(44.1)--串励直流电动机场景示例:基于Simulink开发一个串励直流电动机电压控制仿真模型

高启动转矩:由于励磁绕组和电枢绕组串联连接,电机在启动时可以产生较大的转矩。速度随负载变化:由于励磁电流和电枢电流是同一电流,电机的速度会随着负载的变化而显著变化。适用于重载启动:适合用于需要高启动转矩的应用,如起重机、牵引系统等。

MHD0815的博客 338

类加载器与双亲委派

loadclass:双亲委派机制,子加载器委托父加载器加载,父加载器都加载失败时,子加载器通过 findclass 自行加载。该方法使用了模版方法模式,继承 ClassLoader 后,不需要我们实现。findclass:当前类加载器根据路径以及 class 文件名称加载字节码,从 class 文件中读取字节数组,然后使用 defineClassdefineclass:根据字节数组,返回 Class 对象。int port;// 读取class文件,转化为字节数组。

weixin_45827423的博客 234

图机器学习(7)——图神经网络 (Graph Neural Network, GNN)

图神经网络 (Graph Neural Network, GNN) 是一类专门处理图结构数据的深度学习方法。这类方法也被称为几何深度学习 (geometric deep learning),在社交网络分析、计算机图形学等众多领域正受到日益广泛的关注。在本节中,我们介绍了 GNN 的核心原理,将卷积等经典深度学习范式拓展至非欧几里得图空间,实现了局部结构与全局特征的层次化提取。

盼小辉丶的博客 1万+

图解Java双亲委派:小白也能懂的类加载机制

用户编写的HelloWorld类,会在父加载器都找不到时,由Application加载器从classpath加载。

IndigoNight21的博客 310

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

阿里预面:谈谈你对双亲委派机制的理解?这个名字有啥问题?如何打破?为啥双亲委派?...

前情回顾秋招面试中,我每次面试似乎都被问到关于JVM双亲委派的相关问题。我先考考你:你是怎么理解双亲委派机制的?这个名字你有没有觉得有问题?能举个简单例子说明一些双亲委派吗?双亲委派有何好...

HollisChuang's Blog 708

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

还没搞懂JVM吗?95%的技术面试必问知识点都在这,还怕面不过?

概述:知识点汇总各个部分的内容如下:一、jvm内存相关考点1.详解-jvm内存模型2.详解-jmm内存可见性3、详解-jmm保证二、类加载机制相关考点1.详解类加载机制2.详解类加载器三、其他知识梳理1.详解分代回收四、jvm面试题分享说一下 jvm 的主要组成部分?及其作用?说一下 jvm 运行时数据区?说一下堆栈的区别?队列和栈是什么?有什么区别?什么是双亲委派模型?说一下类加载的执行过程?怎...

十指波课堂的博客 243

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android开发资料!搞懂开源框架设计思想真的这么重要吗?醍醐灌顶!

前言 最近部门招聘,很多工程师,包括我在内都参与了内推和面试的过程,经过这次招聘,我发现能够最终拿到offer的人,基本上在看到简历的那一瞬间就已经定下来了,后续的面试只不过是一种验证而已(注意,是验证,而不是走过场),除非你面试过程中犯错误,或者你不想来,否则,那个offer一定是可以拿下的。 面试题 一般Android面试分为两部分:Java部分和Android部分,下面说一下自己面试过程遇到的一些具体题目和一些相关知识点。 一 JAVA相关 1)JAVA基础 1.java基本数据类型有哪些,int,

左夜天 180

Java小白必看:收藏这份大厂面试通关指南,2026秋招offer轻松拿下!

2026年的Java面试,早已不是“背会八股就能过”的时代。面试官更看重你解决实际问题的能力:给一个高并发场景,你能不能设计出稳定的架构;遇到线上故障,你能不能快速定位并解决。所以,别再死记硬背API用法,把时间花在理解底层原理、梳理实战案例、攻克场景题上。当你能把技术和业务场景结合起来,清晰地说出“为什么这么设计”“这么设计的优缺点”时,offer自然会找上门。

youmaob的博客 357

Thymeleaf的用法

学习笔记

m0_74728220的博客 877

类加载器与双亲委派机制

双亲委派机制是Java中的一种类加载机制。双亲委派机制是当加载一个类时,先由父类加载,父类加载不到时再由子类加载。这种机制的好处是避免了类的重复加载,提高了类加载的效率和安全性。同时,它也为Java提供了一种扩展机制,允许开发人员自定义类加载器,实现特定的加载策略。

ariestse9的博客 981

【Java】深入了解双亲委派机制(常说的类加载机制)

ava虚拟机(JVM)的类加载机制是Java应用中不可或缺的一部分。本文将详细介绍JVM的双亲委派机制,并阐述各关键点。双亲委派机制(Parent-Delegate Model)是Java类加载器中采用的一种类加载策略。该机制的核心思想是:如果一个类加载器收到了类加载请求,默认先将该请求委托给其父类加载器处理。只有当父级加载器无法加载该类时,才会尝试自行加载。本文介绍了JVM的双亲委派机制,包括概念、类加载器层级关系、双亲委派流程及实例分析等方面的内容。

weixin_45716968的博客 7022

JVM-类加载过程详解、双亲委派、类加载常见问题

  Java 虚拟机负责把描述类的数据从 class 文件加载到系统内存中,并对类的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这个过程被称之为 Java 的类加载机制。 类加载过程   类加载机制一共有五个步骤,分别是加载、链接、初始化、使用和卸载阶段,这五个阶段的顺序是确定的。   其中链接阶段会细分成三个阶段,分别是验证、准备、解析阶段,这三个阶段的顺序是不确定的,这三个阶段通常交互进行。解析阶段通常会在初始化之后再开始,这是为了支持 Java 语言的运行时绑定特性

ALONG的博客 560

JVM系列一(类加载机制深度解析:类加载过程、类加载器、双亲委派机制、类加载时机、类的初始化步骤)

1. 类加载运行全过程 2. 类加载器分类、双亲委派机制 2.1 类加载器分类 2.2 类加载器的工作机制(重点:双亲委派机制) 2.3 打破双亲委派机制的一种常见方法 3. 类加载的时机 4. 类的初始化步骤

xingze的博客 795

【JVM】Java类的加载流程以及双亲委派,全盘托管,以及如何打破双亲委派机制

1.JVM基础生命周期流程图 classLoader.loadClass()的类加载(除引导类,所有类都一样) 加载:通过IO查找读取磁盘上的字节码文件,在调用到类才进行加载(调用类的方法,或者new 一个实例对象),会在内存创建一个Class对象,在方法区中代表这个类(用于获取该类的各种数据)。 验证:校验字节码文件是否符合规范。 准备:将类中的非最终静态变量分配内存地址,并赋予类型默认值(根据类型给予,与实际赋值无关)。最终静态变量会直接进行赋值操作,无需进行类型初始值赋予。 解析:将符号引用替换为直

at10090的博客 1857

Java类加载机制&双亲委派机制

类加载阶段分为加载、连接、初始化三个阶段,而加载阶段需要通过类的全限定名来获取定义了此类的二进制字节流。Java特意把这一步抽出来用类加载器来实现。把这一步骤抽离出来使得应用程序可以按需自定义类加载器。并且得益于类加载器,OSGI、热部署等领域才得以在JAVA中得到应用。 在Java中任意一个类都是由这个类本身和加载这个类的类加载器来确定这个类在JVM中的唯一性。也就是你用你A类加载器加载的com.aa.ClassA和你A类加载器加载的com.aa.ClassA它们是不同的,也就是用instanceo

Gamble6 3015

java双亲委派机制,类加载器详解

java双亲委派机制,类加载器到分类以及作用,自定义的类名和包名与系统自带的类名重复了会发生什么

ocean&21的博客 1254
上一篇: 快递鸟API报错 “Reason“: “业务错误[不支持当前快递公司的查询]“解决
下一篇: 详细介绍 Mysql 数据库 · 索引篇,图文解析带你搞懂 InnoDB 存储引擎索引结构、优缺点、失效情况等
durancer
博客等级 码龄6年 5130粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

durancer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值