天天看点

双亲委派的理解

今天在看jvm的时候,将class文件加载到内存的过程,被这个“双亲委派”搞晕了。缕了一下午,终于有所收获,记录一下:

梳理清晰之后,正确的理解应该是:

首先,一个类在刚开始被类加载器加载的时候,类加载器判断是否加载过此类,

这个时候肯定是没有加载的。

此时类加载器不会加载该类,

而是按照:自定义加载器1 -> 应用程序类加载器->扩展类加载器->启动类加载器 的顺序一层层的向上抛。

一直抛到BootstrapClassLoader。

BootstrapClassLoader表示也没有加载过此类,并且也处理不了。这个时候再一层层的向下抛,

一直抛到能处理这个类的加载器。此时才加载此类。

该类再次被加载的时候(破坏双亲委派,例如自己写一个java.lang.String),因为之前这个类已经被爸爸们加载过了,所以我们自己写的这个类根本没有机会得到加载。

这也是为什么要使用双亲委派?为了安全

双亲委派的理解