Java类加载过程中的双亲委派模型

双亲委派模型:大厂高频面试题,轻松搞定 关注公众号 「日拱一兵」,解锁更多面试姿势看过这篇文章,大厂面试你「双亲委派模型」,硬气的说一句,你怕啥?读该文章姿势打开手头的 IDE,按照文章内容及思路进行代码跟踪与... 阅读详情
JDK8及之前的三层类加载器:
  • 启动类加载器:负责加载<JAVA_HOME>/lib目录下的类,或者-Xbootclasspath参数指定的目录下的类,并且只有JVM能够识别的类库才会被加载。
  • 扩展类加载器:负责加载<JAVA_HOME>/lib/ext目录下的类,或者系统变量java.ext.dirs指定的目录下的类。这样用户就可以将通用的类库放入ext目录以扩展Java功能。
  • 应用程序类加载器:负责加载用户ClassPath上的所有的类库。默认情况下的默认类加载器就是它,当然用户也可以自己定义的类加载器。

类加载器双亲委派模型:

类加载双亲委派模型

双亲委派模型工作流程:当收到类加载请求时会首先把请求委托给父类进行加载,每一层都是如此,直到请求传达到最顶层的类加载器,因此所有类加载请求都会到达最顶层的启动类加载器;当父类没有完成类加载请求时,才会自己加载。(请求逐级向上委托,失败逐级向下传递)

Created with Raphaël 2.2.0 开始 存在父类加载器? 委托父类进行加载 加载成功? 结束 自己进行加载 直接调用顶层类加载器进行加载 yes no yes no

双亲委派模型实现:

protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
    {
        synchronized (getClassLoadingLock(name)) {
            // 首先,检查该类有没有被加载
            Class<?> c = findLoadedClass(name);
            
            if (c == null) {//类没有被加载
                long t0 = System.nanoTime();
                try {
                    if (parent != null) {//有父类,则直接委托给父类进行加载
                        c = parent.loadClass(name, false);
                    } else {//没有父类,说明此类加载器是顶层的类加载器,那么就直接调用C++实现的native方法加载该类
                        c = findBootstrapClassOrNull(name);
                    }
                } catch (ClassNotFoundException e) {
                }

                if (c == null) {//父类加载器没有成功加载该类,此时才会自己加载
                    long t1 = System.nanoTime();
                    c = findClass(name);
                    sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);
                    sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);
                    sun.misc.PerfCounter.getFindClasses().increment();
                }
            }
            if (resolve) {
                resolveClass(c);
            }
            return c;
        }
    }
手把手教你用U盘制作Win11启动盘:从PE工具到系统安装全流程 本文提供了一份详尽的Windows 11启动盘制作与系统安装全流程指南。从选择合适的U盘和PE工具开始,重点讲解了如何正确制作包含EFI引导分区的启动盘,并详细演示了在PE环境下进行GPT分区、使用CGI工具安装系统镜像,以及首次启动后的关键设置步骤,帮助用户轻松完成从零到一的系统安装。 阅读详情

相关推荐

Anasys Workbanch实战解析:齿轮接触强度有限元分析全流程

本文详细解析了在Anasys Workbanch中进行齿轮接触强度有限元分析的全流程。从模型简化、材料赋予、接触对设置,到网格划分艺术、非线性接触求解调试,再到结果后处理与工程解读,提供了避开常见陷阱的实战经验,旨在帮助工程师精准评估齿轮强度与疲劳寿命。

weixin_29209805的博客 347

java---双亲委派模型

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

m0_58196614的博客 653

软件测试--用例篇(测试用例的好处、测试用例的七种设计方法、测试用例的粒度、测试用例的评价)

作为软件测试工程师,最主要的工作就是:编写测试用例,那么为什么要编写测试用例?它有什么好处?如何编写测试用例?测试用例写简单好还是复杂好?如何评价测试用例的质量? 天呐撸!能说不会吗?! 作为倾向软件测试工程师的老铁们,还是一起来学习吧! 一、编写测试用例的好处 测试用例是测试者的依据 测试用例使得工作可重复,是自动化测试的基础 补充:自动化测试的前提条件是:功能比较稳定,页面...

cherrydreamsover的博客 3734

什么是双亲委派模型?双亲委派模型有何作用?

什么是双亲委派模型?双亲委派模型有何作用?

吴名氏的博客 13万+

PCIE Lane Margining Linux 环境配置

Copy all the provided files in folder PYC38 or PYC310 to the created pcie_lmt folder. Index of /ftp/python/3.8.10/Copy below commands to a file and rename it as "scan_pcie.py", the commands are from "685662 PCIe-LMT-Gen4_Gen5-r0p77.pdf" in the lane margi

mysongshine的博客 1436

C++总结笔记

/ ++操作 这是因为定义的数组,申请的是连续的内存空间,当ptr++(ptr是int类型的指针变量),地址空间向后偏移是以int类型的大小为单位进行偏移的,相当于int类型数组元素的向后偏移。使用场景:它是最通用的转换形式,用于将一种类型转换为另一种类型,例如基本数据类型的转换(如 float 转 int),指向基类的指针或引用转为指向派生类的指针或引用等。在派生类被调用时会调用派生类中的函数,不会调用基类中的被重写的函数(基类中的函数需要加上virtual才可以,即基类中的函数是虚函数)。

weixin_50890461的博客 5233

Java中的双亲委派模型

双亲委派模型:其实就是类加载优先级顺序问题的处理。 java中的顶层类加载器Bootstrap ClassLoader没有父类加载器外,其他都有父类加载器。 双亲委派模型的流程: (1)在加载类的时候,依次向上进行查看是否有父类的类加载器。直到最顶层。 (2)依次从最顶层开始判断类加载器是否能够对该类进行类加载,能则进行加载并直接返回。 (3)不能则使用子类进行类加载。 双亲委派模型优点: (1)防止类重复加载,例如jdk底层api类Integer的加载。如果多个类加载器进行加..

wei爱努力的博客 510

SuperMap iDesktop 9D三维倾斜摄影数据处理

OSGB格式的三维倾斜摄影数据进入时空大数据平台之前需要进行数据优化和格式转换

weixin_43204897的博客 1131

「 JVM基础 」Java双亲委派机制

Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成的class对象。而且加载某个类的class文件时,Java虚拟机采用的是双亲委派模式。即把请求交由父类处理,它是一种任务委派模式。......

frozenpenguin的博客 5401

向量数据库:PGVector

PGVector 是一个基于 PostgreSQL 的扩展插件,为用户提供了一套强大的向量存储和查询的功能

m0_37559973的博客 1万+

糖果【贪心】

【问题描述】 有N(1≤N <100,000)N(1≤N~<100,000)N(1≤N <100,000)种不同类型的糖果,每种糖果数量无限多。第i种糖果每颗的价格是Pi(1≤Pi≤1018),有Ci(1≤Ci≤1018)P_i(1≤P_i≤10^{18}),有C_i (1≤C_i≤10^{18)}Pi​(1≤Pi​≤1018),有Ci​(1≤Ci​≤1018)头牛想吃这种糖果。 FarmerJohnFarmer JohnFarmerJohn拥有金钱BBB元(1≤B≤1

算法小猪的博客 795

java双亲委派模式

双亲委派模式是Java类加载器在加载类时使用的一种机制。在这种模式下,如果一个类加载器收到了类加载请求,它并不会自己首先去加载,而是把这个请求委派给父类加载器去执行,每一层都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中。只有当父类加载器无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载。这种模式的设计初衷是为了保证Java程序运行的稳定性和安全性。

果酱 の 博客 1146

【原创】汇川H5U PLC控制伺服的方法

6、在线调试-进入伺服调试,可以在本软件上进行调试,可以实现原点回归、正向点动、反向电动、使能(这里使能打开时触摸屏上的使能不能打开,会冲突)、复位、停止(如下图所示)。5、在原点返回设置中一般情况下对原点信号、正限位、负限位、原点返回方向、原点返回方式进行设置,其他设置默认不改(如下图所示)。3、在单位换算设置上只需要修改脉冲数和移动量(根据伺服配套导轨上名牌进行设置),其他设置默认不改(如下图所示)。11、双击后右边出现编辑框 在上半部分定义变量(IN、INOUT、OUT、VAR)(如下图所示)。

Qinmingyue13的博客 6665

JAVA中的类加载过程与双亲委派模型

常见的有:扩展类加载器、应用程序类加载器、自定义类加载器。此时System在Bootstrap中找到并加载,如果类2也要加载System,也是从Bootstrap中查找,当一个类加载器收到类加载的请求时,它会把请求委派给父加载器,并向上传递,最终传递到。如果自定义加载器想要把加载请求委派给引导类加载器的话,可直接用null代替。则类1,类2都会加载一份System类,导致系统出现两份System字节码。从JVM的角度,类加载器主要由两种类型:启动类加载器与其他类加载器。假设有两个类,类1,类2。

Beautifulbabe的博客 217

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

来聊聊JVM中的类加载过程以及双亲委派模型(学习Java必知内容)

本文主要讲解了 JVM 中的类加载过程, 以及其中涉及到的双亲委派模型, 是我们学习 Java 过程中, 需要着重了解的.

一些普普通通的学习笔记 933

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

一文搞懂双亲委派模型

类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取此类的二进制字节流”这个动作放到 Java 虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 从 Java 虚拟机的角度来讲,只存在以下两种不同的类加载器: 启动类加载器(Bootstrap ClassLoader),使用 C++ 实现,是虚拟机自身的一部分 所有其它类的加载...

To be a great coder 2万+

深度解析JVM类加载器与双亲委派模型

Java虚拟机(JVM)是Java程序运行的核心,其中类加载器和双亲委派模型是JVM的重要组成部分。本文将深入讨论这两个概念,并解释它们在实际开发中的应用。类加载器是JVM的一部分,负责加载Java类的字节码文件。Java应用程序中的每个类都必须由类加载器加载,类加载器将类的字节码文件从磁盘或网络加载到内存中,并在JVM中创建一个对应的Class对象。双亲委派模型是一种类加载器之间的层次结构,它通过父类加载器委派给子类加载器加载类。

weixin_43268715的博客 2381

JVM 类加载机制及双亲委派模型

整体的流程 Java 中的所有类,必须被装载到 jvm 中才能运行,这个装载工作是由 jvm 中的类加载器完成的,类加载器所做的工作实质是把类文件从硬盘读取到内存中,JVM 在加载类的时候,都是通过 ClassLoader 的 loadClass()方法来加载 class 的,loadClass 使用双亲委派模型。 先解析一下这张图,图表示类的整个声明周期,类从被加载到虚拟机内存开始,到卸载出内存为止,包含 7 个阶段,其中验证、准备、解析 3 个阶段统称为连接。 加载、验证、准备、初始化和卸载这 5 个

java123456111的博客 1371

Java类加载机制详解

Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最 终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制

怪咖@的博客 2503

(转载)简述java类加载机制ClassLoader、双亲委派模型及类隔离加载

一、类加载器ClassLoader: 用于将Java类加载到Java虚拟机中,不同的类加载器加载的类不可能相等,每一个类,其唯一性都由加载他的类加载器和他本身一同确定,每一个类加载器,都有一个独立的类名称空间,换言之:即使两个类来源同一个Class文件,被同一个虚拟机加载,只要加载他们的类加载器不同,这两个类就必定不相等(因此此时会在虚拟机中存在两个同名类,虽然来自一个Class文件,但依然各自独立)。其常用的类加载器有以下三种,当然除此之外还有用户自定义类加载器 根加载器(Bootstrap) 扩展加载

fish_cake的博客 574

深入解析Java类加载机制:双亲委派模型的设计与实现

委派原则:当一个类加载器收到类加载请求时,它首先不会尝试自己加载这个类,而是将请求委派给父类加载器去完成。层次结构:所有的类加载请求最终都应该被传递到顶层的启动类加载器。自顶向下尝试:只有当父加载器反馈自己无法完成加载请求时,子加载器才会尝试自己加载。@Override// 自定义类加载逻辑// 从自定义位置加载类字节码。

搬砖的小熊猫的博客 2446

Java的类加载器和类加载机制详解

详细介绍了Java的类加载器和类加载机制。Java的Class(类)加载器,主要工作在Class加载的“加载阶段”,其主要作用是从系统外部获取Class的二进制数据流。

终生学习践行者 2733

双亲委派模型是什么,为什么要使用双亲委派模型

在Java中,类加载器(ClassLoader)是负责将类文件加载到JVM中的关键组件。为了确保类加载过程的安全性和稳定性,Java引入了一种叫做双亲委派模型(Parent Delegation Model)的机制。这篇文章将介绍什么是双亲委派模型,以及为什么要使用这种模型。

常备不懈 2133

Java类加载机制、双亲委派模型

类加载机制、双亲委派模型类的生命周期:类的加载过程三层类加载器双亲委派模型 类的生命周期: 一个类型从被加载到虚拟内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resoulution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称为连接(Linking)。这七个阶段发生的顺序如图所示。 ​

weixin_44609958的博客 362

类加载器

类加载过程 加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。 类加载器分类 JVM 中内置了三个重要的 ClassLoader,除了 BootstrapClassLoader 其他类加载器均由 Java 实现且全部继承自java.lang.ClassLoader: 启动类加载器(Bootstrap ClassLoader)此类加载器负责将存放...

少说,多做。 3639

Java类加载过程

类加载过程Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机是如何加载这些 Class 文件呢? 系统加载 Class 类型的文件主要三步:加载->连接->初始化。连接过程又可分为三步:验证->准备->解析。 加载类加载过程的第一步,主要完成下面3件事情: 通过全类名获取定义此类的二进制字节流 将字节流所代表的静态存储结...

一盏小灯下 173

双亲委派模型的代码实现

双亲委派模型的代码实现集中在java.lang.ClassLoader的loadClass()方法当中。  1)首先检查类是否被加载,没有则调用父类加载器的loadClass()方法;  2)若父类加载器为空,则默认使用启动类加载器作为父加载器;  3)若父类加载失败,抛出ClassNotFoundException 异常后,再调用自己的findClass() 方法。 loadClass源代码如...

luzhensmart的专栏 862
上一篇: Java可视化监控工具JConsole
下一篇: Java中字段不存在多态
小菜大白
博客等级 码龄10年 4粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值