类加载器
Java 中的类加载器主要用于实现类的加载,Java 中的类和类加载器一起确定类在JVM 中的唯一性
启动类加载器:
C++ 实现,是JVM 的一部分,其他加载器都是Java 实现,并且独立于JVM。Bootstrap ClassLoader 主要负责加载<Java_Home>/lib 或者被-xbootclasspath 参数指定的路径中的类库。应用程序不能直接使用该加载器。
扩展类加载器:
Extension ClassLoader 负责加载<Java_Home>/lib/ext 下的类或者Java.ext.dirs 指定的路径下的类库,开发者可以直接使用该加载器。
应用程序类加载器
Application ClassLoader 负责加载用户指定的路径,即Class_Path 下的类库。如果App 没有自定义类加载器,默认使用该加载器。
双亲委派模型
功能:
要求除了顶层的启动类加载器以外,其他加载器必须有属于自己的父类加载,使用组合关系来服用父类加载器。
过程:
当用户需要加载器时,首先不会自己去加载这个类,而是首先调用父类加载器,将请求委派给父类加载器,每一层都是如此。因此所有的加载最终都会送达顶层的启动类加载器。只有当父类加载器反馈不能加载时,才会将加载的任务给到子加载器。
优点:
使得Java 类伴随着他的类加载器一起有了层次关系网(优先级)。以Object 类为例,任何加载Object 的请求都会到达启动类加载器,使得Object 类在各种类加载器中都是一个类,以免出现混乱。保证Java 程序的稳定性。