Java的类装载器
一、定义
类装载器是寻找类的字节码文件并构造出类在JVM内部表示对象的组件。
二、JVM运行时产生的3个类装载器(ClassLoader)
- 根装载器
- ExtClassLoader 扩展类装载器
- AppClassLoader 应用类装载器
根装载器不是ClassLoader 的子类, 它使用C++语言编写,因而在Java语言中看不到它。根装载器负责装载JRE的核心类库,如JRE目标下的rt.jar、charsets.jar 等
ExtClassLoader和AppClassLoader都是ClassLoader的子类。其中ExtClassLoader负责装载JRE扩展目录ext中的JAR类包;AppClassLoader负责装载Classpath路径下的类包。
三、父子关系
这三个类装载器存在父子层级关系。
根装载器是ExtClassLoader的父装载器;ExtClassLoader是AppClassLoader的父装载器。
默认情况下,使用AppClassLoader装载应用程序的类。
四、全盘负责委托机制
“全盘委托”是指当一个ClassLoader装载一个类时,除非显示地使用另一个ClassLoader,该类所依赖及引用类也由这个ClassLoader载入;
“委托机制”是指先委托父装载器寻找目标类,只有在找不到的情况下才从自己的类路径中查找并装载目标类。
这种机制避免了恶意基础类的安全隐患发生。