1.类加载器
BootstrapClassLoader(启动类加载器)
- 最顶层的加载类,由C++实现
- 负责加载
%JAVA_HOME%lib目录下的jar包和类,或者被-Xbootclasspath参数指定的路径中的所有类
ExtensionClassLoader(扩展类加载器)
- 由Java实现,继承自
java.lang.ClassLoader - 负责加载
%JAVA_HOME%/lib/ext目录下的jar包和类,或者被java.ext.dirs系统变量所指定的路径下的jar包
AppClassLoader(应用程序类加载器)
- 由Java实现,继承自
java.lang.ClassLoader - 面向用户的加载器,负责加载当前应用classpath下的所有jar包和类
2 双亲委派模型
-
在类加载时,系统首先判断当前类是否被加载过
-
已经被加载过的类会直接返回
-
否则尝试自己加载
- 加载时,首先将该请求委派给父类加载器的loadClass()处理,即所有请求最终都会传送到顶层的BootstrapClassLoader
- 当父类加载器无法处理时,才自己加载
- 当父类加载器为NULL时,使用BootstrapClassLoader作为父类加载器