JDK自带三个类加载器:BootStrapClassLoader ExtClassLoader AppClassLoader
BootStrapClassLoader
是顶层类加载器,是
ExtClassLoader
的父加载器(通过parent属性指定,不是继承关系)。负责加载%JAVA_HOME%lib
下的class文件。
ExtClassLoader
是
AppClassLoader
的父加载器(属性指定),负责加载%JAVA_HOME%lib/ext
下的class文件。
AppClassLoader
所有自定加载器必须继承自
AppClassLoader
负责加载classpath下的class文件。(系统类加载器、线程上下文加载器)
双亲委派
好处
- 主要是为了安全性,避免用户自己编写的类动态替换 Java的一些核心类,比如 String
- 避免了类的重复加载,因为 JVM中区分不同类,不仅仅是根据类名,相同的 class文件被不 同的 ClassLoader加载就是不同的两个类