七、类加载器
2020年12月22日
14:15
所有的类都由类加载器加载,加载的作用就是将 .class文件加载到内存。
类加载器
JVM内置了三个类加载器,
- BootstrapClassLoader,加载核心类,例如%JAVA_HOME%/lib 下的类
- ExtensionClassLoader,加载核心类中的ext拓展jar包,例如%JAVA_HOME%/lib/ext 下的jar包和类
- AppClassLoader,面向用于的加载器,负责加载当前应用classpath下的所有jar包和类
双亲委派模型
类加载过程如图所示,实际上非常简单,
- 类加载的时候总是将加载委托给父类的loadClass
- 类加载的时候,总是判断是否加载过,如果加载过则不再加载
上述过程可以防止类重复加载,举一个例子。lang.util.Object类,会被BootstrapClassLoader加载,所以你无论无何也无法写一个相同全类名的类替代它,因为该类加载由应用程序类加载器委托给父类,最终判断已经加载,无法重复加载。