技术栈

类加载器

2019-10-14  本文已影响0人  烟雨乱平生

类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名空间。这句话可以表达的更通俗一些:比较两个类是否“ 相等”,只有在这两个类在同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一个虚拟机加载,只要加载他们的类加载器不同,那么这两个类必不相等。

双亲委派模型

从Java虚拟机的角度来讲,只存在两种不同的类加载器,一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现,是虚拟机自身的一部分;另一种就是所有其他的类加载器,这些类加载器都由Java语言实现,独立于虚拟机外,并且都继承与抽象类java.lang.ClassLoader。

从Java开发人员角度来看,类加载器还可以划分的更细一些,绝大部分Java程序都会使用到以下3种系统提供的类加载器:

双亲委派模型并不是一个强制性的约束模型,而是Java设计者推荐给开发者的一种类加载器实现方式。


image.png

双亲委派模型的工作过程是:如果一个类加载器接收到了类加载请求,他首先不会自己去尝试加载这个类,而是把这个类的请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父类加载器反馈自己无法完成这个加载请求时,子加载器才会尝试自己去加载。

上一篇 下一篇

猜你喜欢

热点阅读