当前位置: 首页 > news >正文

类加载器、双亲委派

一、什么是类加载器

JVM只会运行二进制文件,类加载器的作用是将字节码文件加载到JVM中,从而让Java程序能够启动起来

二、类加载器有哪些

1、启动类加载器(BootStrap ClassLoader)

加载JAVA_HOME/jre/lib目录下的类库

2、扩展类加载器(ExtClassLoader)

加载JAVA_HOME/jre/lib/ext目录下的列

3、应用类加载器(AppClassLoader)

用于加载项目的classpath下的类

4、自定义类加载器(CustomizeClassLoader)

自定义类集成ClassLoader,实现自定义类加载规则

三、双亲委派模型

双亲委派模型:加载一个类,先委托上一级的加载器进行加载,如果上级加载器也有上级,则会继续向上委托,如果该类委托上级没有被加载,子加载器则会尝试加载该类

如果我的代码里写了一个Student类,要被加载到JVM中间,当“应用类加载器”(AppClassLoader)尝试加载之前,会先交给它的上一级,也就是“扩展类加载器”进行加载,而扩展类加载器也有上一级,所以会再次尝试先交给它的上一级进行加载,也就是启动类加载器进行加载

但是,启动类加载器,只会加载JAVA_HOME/jre/lib目录下的类,我们写的这个Student类,明显不在其中,所以无法加载

所以就又会让子加载器(扩展类加载器)尝试加载,我们写的这个Student类,明显也不在JAVA_HOME/jre/lib/ext中,在ClassPath中

所以最后会由应用类加载器进行加载

四、JVM为什么会使用双亲委派模型

1、通过双亲委派机制,可以避免某一个类被重复加载,当父类已经加载后则无需重复加载,保证唯一性

2、为了安全,保证类库API不会被修改

我们知道,在java.lang包下面有个String类

如果我们自己写一个目录结构为java.lang,并在下面写一个String类,这个类能被加载到启动类中,但是是无法执行的

如果这个类以及其中的方法,可以被调用,那么就有启动类库被篡改的可能了,所以不能执行

相关文章:

  • Jetpack Compose 显示时间
  • 深入Python C API:掌握常用函数与实战技巧
  • 星越L_驾驶模式讲解
  • java项目之在线购物系统(源码+文档)
  • 【商城实战(54)】解锁商城国际化密码:内容管理全攻略
  • 【PCB工艺】晶体管的发展历史
  • 如何提升 Java 开发能力?
  • 智能施工方案生成工具开发实践:从架构设计到核心实现
  • 25年护网二面
  • MySQL -- 复合查询
  • 关于VMware安装win11出现此电脑无法运行win11系统解决方法
  • Spring Boot整合MyBatis
  • 智能搜索时代:如何通过AI搜索与GEO策略打造品牌护城
  • 银河麒麟操作系统的上下游版本判断
  • AI鸟类识别技术革新生态监测:快瞳科技如何用“智慧之眼”守护自然?
  • yarn 装包时 package里包含sqlite3@5.0.2报错
  • ruoyi-vue部署4
  • 第六届电气、电子信息与通信工程国际学术会议 (EEICE 2025)
  • Hadoop NN和JN VERSION版本不一致
  • 洛谷题目:P1018 [NOIP 2000 提高组] 乘积最大 题解
  • 2025上海车展圆满闭幕,共接待海内外观众101万人次
  • 前行中的“模速空间”:要攻克核心技术,也要成为年轻人创业首选地
  • 中央网信办:重点整治违规AI产品、利用AI制作发布谣言等突出问题
  • 民生访谈|支持外贸企业拓内销,上海正抓紧制定便利措施
  • 王毅:时代不容倒退,公道自在人心
  • 解读|特朗普“助攻”下加拿大自由党“惨胜”,卡尼仍需克服“特鲁多阴影”