双亲委派模型(图文全面详解)

双亲委派模型(图文全面详解)-mikechen

双亲委派模型不仅是JVM类加载机制的重要内容,而且Java面试经常会考,下面我重点详解双亲委派模型@mikechen

什么是双亲委派模型

所谓的双亲委派模型,就是加载类的时候,先请求其父类加载器去加载,如果父类加载器无法加载类,再尝试自己去加载类,这就是双亲委派模型。

 

双亲委派模型图形

双亲委派模型图形,如下图所示:

双亲委派模型(图文全面详解)-mikechen

这里“双亲”指的是类加载类先向上找,再向下找的流程就叫做双亲委派模型。

 

双亲委派模型优缺点

双亲委派模型优点

双亲委派模型优点,主要就是2个:

1.避免类的重复加载

当一个类加载器需要加载某个类时,它会先委托给它的父类加载器去加载,如果父类加载器也找不到该类才会自己尝试加载,避免重复加载同一个类。

 

2.确保类的安全性

通过使用双亲委派模型,可以确保核心类库的安全性,同时也可以防止应用程序自己编写的类替换掉核心类库中的类,避免恶意代码的潜在危险。

例如:jre 里面已经提供了 String 类在启动类加载时加载,那么用户自定义再自定义一个不安全的 String 类时,按照双亲委派模型就不会再加载用户定义的那个不安全的 String 类了,这样就可以避免非安全问题的发生了。

 

双亲委派模型缺点

由于加载范围限制,顶层的ClassLoader无法访问底层的ClassLoader所加载的类。

 

双亲委派模型步骤

Java的双亲委派模型可以概括为以下6个步骤,如下图所示:

双亲委派模型(图文全面详解)-mikechen

双亲委派模型的执行流程是这样的:

1.当加载一个类时,会先从应用程序类加载器的缓存里查找相应的类,如果能找到就返回对象,如果找不到就执行下面流程;

2.在扩展加载器缓存中查找相应的类,如果能找到就返回对象,如果找不到就继续下面流程;

3.在启动类加载器中查询相应的类,如果找到就返回对象,如果找不到就继续下面流程;

4.在扩展加载器中查找并加载类,如果能找到就返回对象,并将对象加入到缓存中,如果找不到就继续下面流程;

5.在应用程序类加载器中查找并加载类,如果能找到就返回对象,并将对象加入到缓存中,如果找不到就返回 ClassNotFound 异常。

6.如果某个类加载器加载了某个类,那么它会将该类的定义缓存起来,以便以后再次请求加载该类时可以直接返回缓存中的定义。

以上就是双亲委派模型的详解,更多JVM内容,请查看:JVM(Java虚拟机)从0到1全部合集

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法