双亲委派模型
从jvm角度,只有两种类加载器
- 启动类加载器(Bootstrap ClassLoader)是jvm自身的一部分
- 所有其他类加载器,独立于jvm外部,并全部继承自抽象类java.lang.ClassLoader
从java开发人员的角度来看有三种
启动类加载器(Bootstrap ClassLoader)
负责加载存放在\lib目录下的或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机是别的类 扩展类加载器(Extension ClassLoader)
负责加载\lib\ext目录下的或者被java.EXT.DIRS系统变量所指定的路径中的所有类库 应用程序类加载器(Application ClassLoader)
负责加载用户类路径上所指定的类库
双亲委派模型工作原理:
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载。
优点:
java类随着它的类加载器一起具备了一种带有优先级的层次关系。
|
|
读后感笔记来自周志明的《深入理解Java虚拟机(第2版)》