首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一、类加载的双亲委托机制详解

一、类加载的双亲委托机制详解

作者头像
梅花
发布于 2020-09-28 02:50:13
发布于 2020-09-28 02:50:13
78300
代码可运行
举报
运行总次数:0
代码可运行

    在父亲委托机制中,各个加载器按照父子关系形成了树形结构,除了根类加载器之外,其余类加载器都有且只有一个父加载器

    通俗理解: 某一个类加载器加载一个特定的类,他并不是立即由自己加载了,而是将这个动作委托给父亲来完成,如果父亲还有父亲,就继续将这个动作向上传递,一直到没有父亲的 根类加载器

也就是启动类加载器。由根类加载来尝试着进行加载我们所要加载的class文件,如果不成功,就返回给拓展类加载器,拓展类加载器尝试着加载,如果不成功就继续向下传递,一直到加载成功,然后将整个加载动作返回给第一次尝试加载的加载器中。

      自己想要去加载,自己不去加载,让自己的父亲去加载,如果上面还有,就继续向上追溯,一直到根节点,然后根节点尝试自己加载,如果能加载,则成功,传递加载动作给 第一次加载的类加载器,如果不成功,传递给子节点,让子节点尝试去加载,子节点能否加载成功,成功则返回加载动作,如果不成功,接续传递给子节点,重复执行。

    并不是所有的类加载都是双亲委托机制 Oracle 的JDK 是标准的双亲委托机制

二、使用代码进行测试、分别加载String 和用户自定义的类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.zuoyan.classloader;

public class ClassLoaderDemo {
    
    public static void main(String[] args) throws Exception {
        Class<?> clazz1 = Class.forName("java.lang.String");
        ClassLoader clazz1ClassLoader = clazz1.getClassLoader();
        Class<?> clazz2 = Class.forName("com.zuoyan.classloader.C");
        ClassLoader classLoader2 = clazz2.getClassLoader();

        System.out.println(clazz1ClassLoader);
        System.out.println(classLoader2);

    }
}

class C{

}

  代码执行结果:

    null     sun.misc.Launcher$AppClassLoader@18b4aac2

  执行结果的解释,如果是使用跟类加载进行加载的,返回的就是null ,以下是类加载中的getClassLoader 上的方法注释

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
自定义类加载器
自定义类加载器只需要继承ClassLoader,同时覆盖findClass方法(而不是loadClass方法)即可
benym
2022/07/07
1.3K0
【Java基础增强】类加载器和反射
陶然同学
2023/10/14
2470
【Java基础增强】类加载器和反射
由浅入深谈 Java 的类加载机制
本文涉及知识点:双亲委托机制、BootstrapClassLoader、ExtClassLoader、AppClassLoader等。 什么是 Java 类加载机制? Java 虚拟机使用 Java
神秘的寇先森
2018/05/30
5880
面试官:谈谈类加载器吧,你有没有看过类加载器的源码?
2)我们的jsp会被转换成servlet,而我们的serlvet是一个java文件,会被编译成class文件
程序员追风
2020/07/28
9760
jvm介绍 day4
数组对是在程序运行期间由jvm创建的而不是由类加载器加载的,调用数组的getClassLoader得到的结果是数组中对象所返回的结果,如果数组中的元素是原生类型(int,double)的话调用getClassLoader是没有类加载器的
如来
2020/07/15
3410
一文讲透 Tomcat 的类加载机制!揭秘类加载核心
你了解 Apache Tomcat 的类加载机制吗?本文将从底层原理切入,彻底揭秘 Tomcat 类加载所涉及的源码、机制和方案,助你深入掌握 Tomcat 类加载核心!
玄姐谈AGI
2021/01/11
2.3K0
一文讲透 Tomcat 的类加载机制!揭秘类加载核心
Java中常见的类加载器及双亲委派机制的原理
我们在代码里得到类的一个class对象,然后通过它的getClassLoader方法得到一个ClassLoader对象,那么运行一下看看这个ClassLoader对象的名字是什么
全栈程序员站长
2022/07/25
2570
Java中常见的类加载器及双亲委派机制的原理
类加载器的双亲委托模式
遵照之前解析反射 中,我们说到类的加载器ClassLoader在对类进行加载的时候,默认会使用双亲委托模式。系统会判断当前类是否已经被加载,如果已经被加载,就会直接返回可用的类,否则就会尝试加载,在尝试加载时,会先请求双亲处理,如果双亲请求失败,则会自己加载。
算法之名
2020/05/26
8910
jvm的类加载过程
JVM将类的加载过程分为三个步骤:装载(Load)、链接(Link)和初始化(Initialize)
是小张啊喂
2021/02/22
7960
jvm的类加载过程
JVM内存与垃圾回收篇第2章类加载子系统
在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式。那为什么还需要自定义类加载器?
yuanshuai
2022/08/22
2790
JVM内存与垃圾回收篇第2章类加载子系统
Java程序设计(高级及专题)- 类的加载和反射[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 加载器 类加载器就是可以从其作用来理解,其功能就是将classpath目录下.class文件,加载到内存中来进行一些处理,处理完的结果就是一些字节码
全栈程序员站长
2022/08/04
4220
Java程序设计(高级及专题)- 类的加载和反射[通俗易懂]
android classloader双亲委托模式
概述 ClassLoader的双亲委托模式:classloader 按级别分为三个级别:最上级 : bootstrap classLoader(根类加载器) ; 中间级:extension classLoader (扩展类加载器) 最低级 app classLoader(应用类加载器)。 根(Bootstrap)类加载器:该加载器没有父加载器。它负责加载虚拟机的核心类库,如java.lang.*等。例如java.lang.Object就是由根类加载器加载的。根类加载器从系统属性sun.boot.class
xiangzhihong
2018/02/06
1.5K0
android classloader双亲委托模式
JVM-白话聊一聊JVM类加载和双亲委派机制源码解析
其中最核心的方法 loadClass ,其实现我们常说的双亲委派机制 ,我们后面展开。
小小工匠
2021/08/17
3090
4. JDK源码级别彻底剖析类加载机制
当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到 JVM。
源码之路
2021/03/02
4570
4. JDK源码级别彻底剖析类加载机制
深入探索“线程上下文类加载器”
Q: 越基础的类由越上层的加载器进行加载,如果基础类又要调用回用户的代码,那该怎么办? A: 解决方案:使用“线程上下文类加载器”
tomas家的小拨浪鼓
2019/08/06
2.1K1
深入探索“线程上下文类加载器”
Java魔法堂:类加载器入了个门
一、前言                               《Java魔法堂:类加载机制入了个门》中提及整个类加载流程中只有加载阶段作为码农的我们可以入手干预,其余均由JVM处理。本文将记录
^_^肥仔John
2018/01/18
8330
Java魔法堂:类加载器入了个门
聊聊类加载器与双亲委派模型
我们经常会在面试中遇到有关类加载器的问题,而作为一名Java开发人员应该了解类加载器如何工作?双亲委派模型是什么?如何打破双亲委派?为什么打破?等等。所以今天的主题就是聊一聊类加载器。
pjmike
2020/03/22
8880
类加载机制与对象的创建
查找并加载类的二进制数据加载时类加载过程的第一个阶段,在加载阶段,虚拟机需要完成以下三件事情:
leobhao
2022/06/28
8190
类加载机制与对象的创建
相关推荐
自定义类加载器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档