Java面试宝典:类加载器分层设计与核心机制解析
一、类加载器分层的原因
在JDK 1.2之前的JVM中,仅存在一个类加载器——“Bootstrap”根类加载器。这种设计存在明显安全隐患:若用户编写了一个java.lang.String
类,由于只有一个类加载器,无法区分该类与Java核心库的java.lang.String
,理论上用户自定义的类可访问和修改java.lang
包下其他类的默认访问修饰符属性和方法,导致核心类库的安全受到威胁。
为解决这一问题,设计者通过类加载器分层对类的“信任级别”进行区分:将类加载器划分为不同层级,分别负责加载不同信任级别的类——最可信的Java核心API类、次可信的扩展类、以及本机类路径中的应用类,由此诞生了三种基础类加载器。
二、基础类加载器与示例验证
1. 基础类加载器层级
从开发视角看,JVM的基础类加载器分为三层:
- 启动类加载器(Bootstrap ClassLoader):加载Java核心类库(如
rt.jar
),由C++实现,无父加载器。 - 扩展类加载器(Ext ClassLoader):加载扩展目录(如
jre/lib/ext
)中的类,父加载器为启动类加载器。 - 应用程序类加载器(App ClassLoader):加载类路径(
classpath