Java 类加载的核心是双亲委派模型,它是JVM保障类安全、避免类冲突、实现类隔离的底层基石,也是理解SPI、热部署、模块化的关键。
一、双亲委派核心流程
- 类加载器收到请求,先委托父加载器,逐级向上直至启动类加载器;
- 顶层加载器无法加载时,才由子类加载器尝试加载;
- 全程保证一个类只被加载一次。
JVM三层加载器:
- 启动类加载器:加载JDK核心类(
java.lang.*); - 扩展类加载器:加载JDK扩展包;
- 应用类加载器:加载业务代码。
二、核心设计意义
- 安全防护:禁止自定义类覆盖JDK核心类(如伪造
java.lang.String无效); - 类唯一性:避免同一类被重复加载,防止类型转换异常;
- 职责分层:核心类、扩展类、业务类分层隔离,结构清晰。
三、打破双亲委派的场景
双亲委派并非绝对,以下场景会主动突破:
- SPI机制:JDBC、Spring SPI 用线程上下文类加载器加载第三方实现;
- 热部署:JRebel、DevTools 通过自定义类加载器实现类热更;
- 模块化:OSGi、Java9+ 模块化采用网状加载结构。
结语
双亲委派是JVM类体系的底层契约,吃透它是理解Java类安全、SPI与热部署本质的核心,也是JVM进阶的必备知识点。