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

【JVM】类加载器都有哪些?

类加载器 负责将字节码文件(.class)加载到JVM中。
遵循双亲委派机制

从上往下有四个:
启动类加载器->扩展类加载器->应用类加载器->自定义类加载器

1.启动类加载器(Bootstrap ClassLoader):

  • 最顶层的加载器,是由C/C++实现的,不是Java类。
  • 负责加载Java核心类库(JDK最基础、最核心的类)
  • 加载路径: $JAVA_HOME/jre/lib目录下的核心类库(如rt.jar、resources.jar等),或通过-Xbootclasspath参数指定的路径。

特点:
1.没有父类加载器,因为它是最顶层。
2.在Java代码中无法直接获取其实例,(通过getClassLoader()获取核心类的加载器时,返回null,因为它不是 Java 类实现)。

2.扩展类加载器(Extension ClassLoader):

  • 是启动类加载器的子类
  • 负责加载Java的扩展类库。
  • 默认加载 $JAVA_HOME/jre/lib/ext目录下的类。

特点:
1.父类加载器是:启动类加载器(但因启动类加载器是 C++ 实现,getParent()方法返回null)。
2. 扩展类库通常是 JDK 提供的可选功能类(如一些加密、XML 解析相关的扩展类)。

3.应用类加载器(Application ClassLoader):

  • 扩展类加载器的子类,也称为系统类加载器(System ClassLoader)
  • 负责加载用户编写的类和第三方jar包(即类路径classpath下的类)。
  • 默认加载classpath指定的路径(包括项目的src/main/classeslib目录下的 jar 包,或通过-cp/-classpath参数指定的路径)。

特点:
1.是程序中默认的类加载器(如果没有自定义类加载器,ClassLoader.getSystemClassLoader()返回的就是它)。
2.我们日常开发的Java类(如com.example.MyClass)默认由它加载。

4.自定义类加载器(User-Defined ClassLoader):

我们通过继承java.lang.ClassLoader类自定义实现,可作为应用类加载器的子类。
满足特殊场景的类加载需求。
常见的应用场景:
1.加载加密的.class文件(需在加载时解密);
2.从网络、数据库等非本地文件系统加载类;
3. 实现类的离(如 Tomcat 的类加载器,为每个 Web 应用单独加载类,避免不同应用的类冲突);

实现方式:
重写ClassLoaderfindClass()方法(负责查找并加载类的字节码),必要时重写loadClass()方法(可能破坏双亲委派机制)。

双亲委派机制:

核心逻辑:当类加载器需要加载某个类时,需要先委托其父类加载器尝试加载,只有父类加载器无法加载时,才由自己加载。
向上委托,向下加载

从而达到安全性和唯一性。

  • 安全性:确保核心类(如java.lang.String)不会被用户自定义的类篡改(父类加载器已加载核心类,子类加载器不会重复加载);
  • 唯一性:同一个类在JVM中只会被加载一次,避免类重复定义。
http://www.dtcms.com/a/350935.html

相关文章:

  • ChromaDB向量数据库Python教程:从入门到实战完整指南(含游戏资源管理系统案例
  • Java大厂面试实战:从Spring Boot到微服务架构的全链路技术拆解
  • 计算机视觉:从 “看见” 到 “理解”,解锁机器感知世界的密码
  • Windows 命令行:mkdir 命令
  • 【配置】CurSor使用Claude 4.0如何解除地域限制
  • [CS创世SD NAND征文] CS创世CSNP1GCR01-AOW在运动控制卡中的高可靠应用
  • 塞尔达传说 旷野之息 PC/手机双端(The Legend of Zelda: Breath of the Wild)免安装中文版
  • 深入了解linux系统—— 线程封装
  • podman启动mongdb的container因为权限问题导致changing ownership和读取storage.bson失败的解决方法
  • HarmonyOS image组件深度解析:多场景应用与性能优化指南(2.4详细解析,完整见uniapp官网)
  • week5-[循环结构]听歌
  • MAE——Masked Autoencoders Are Scalable Vision Learners/图像分类和去雨雾重建/
  • 【ElasticSearch】json查询语法
  • 每日一题——力扣498 对角线遍历
  • Mo 人工智能在线教学实训平台
  • Python训练营打卡Day43-Tensorboard使用介绍
  • 美团一面“保持好奇”
  • JavaScript 中类(class)的super 关键字
  • AMH和cyberpanel等管理软件,哪个里面可以部署AI软件?
  • 【STM32】CubeMX(十二):FreeRTOS消息队列
  • vue3+typescript:为表格生成唯一的Key/No
  • 二分|组合|旋转数组
  • SET FOREIGN_KEY_CHECKS=0
  • CentOS 部署 Prometheus 并用 systemd 管理
  • 似然函数对数似然函数负对数似然函数
  • 项目1:异步邮件发送系统实战
  • 自由学习记录(88)
  • 设计一个完整可用的 Spring Boot Starter
  • 深入浅出 ArrayList:从基础用法到底层原理的全面解析(下)
  • 2025职场进阶:低门槛技能实用手册