双亲委派模型不仅是JVM类加载机制的重要内容,而且Java面试经常会考,下面我重点详解双亲委派模型@mikechen
什么是双亲委派模型
所谓的双亲委派模型,就是加载类的时候,先请求其父类加载器去加载,如果父类加载器无法加载类,再尝试自己去加载类,这就是双亲委派模型。
双亲委派模型图形
双亲委派模型图形,如下图所示:
这里“双亲”指的是类加载类先向上找,再向下找的流程就叫做双亲委派模型。
双亲委派模型优缺点
双亲委派模型优点
双亲委派模型优点,主要就是2个:
1.避免类的重复加载
当一个类加载器需要加载某个类时,它会先委托给它的父类加载器去加载,如果父类加载器也找不到该类才会自己尝试加载,避免重复加载同一个类。
2.确保类的安全性
通过使用双亲委派模型,可以确保核心类库的安全性,同时也可以防止应用程序自己编写的类替换掉核心类库中的类,避免恶意代码的潜在危险。
例如:jre 里面已经提供了 String 类在启动类加载时加载,那么用户自定义再自定义一个不安全的 String 类时,按照双亲委派模型就不会再加载用户定义的那个不安全的 String 类了,这样就可以避免非安全问题的发生了。
双亲委派模型缺点
由于加载范围限制,顶层的ClassLoader无法访问底层的ClassLoader所加载的类。
双亲委派模型步骤
Java的双亲委派模型可以概括为以下6个步骤,如下图所示:
双亲委派模型的执行流程是这样的:
1.当加载一个类时,会先从应用程序类加载器的缓存里查找相应的类,如果能找到就返回对象,如果找不到就执行下面流程;
2.在扩展加载器缓存中查找相应的类,如果能找到就返回对象,如果找不到就继续下面流程;
3.在启动类加载器中查询相应的类,如果找到就返回对象,如果找不到就继续下面流程;
4.在扩展加载器中查找并加载类,如果能找到就返回对象,并将对象加入到缓存中,如果找不到就继续下面流程;
5.在应用程序类加载器中查找并加载类,如果能找到就返回对象,并将对象加入到缓存中,如果找不到就返回 ClassNotFound 异常。
6.如果某个类加载器加载了某个类,那么它会将该类的定义缓存起来,以便以后再次请求加载该类时可以直接返回缓存中的定义。
以上就是双亲委派模型的详解,更多JVM内容,请查看:JVM(Java虚拟机)从0到1全部合集
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》