双亲委派机制属于JVM类加载机制的重要内容,而且Java面试经常会考,下面我重点详解双亲委派机制@mikechen
双亲委派机制定义
双亲委派机制是Java类加载机制的一种实现方式,用于避免类的重复加载。
这里“双亲”指的是类加载类先向上找,再向下找的流程就叫做双亲委派机制。
如下图所示:
双亲委派机制作用
双亲委派机制作用主要体现在如下3个方面:
1.避免类的重复加载
当一个类加载器需要加载某个类时,它会先委托给它的父类加载器去加载,如果父类加载器也找不到该类,才会自己尝试加载。
这种机制可以避免重复加载同一个类,节省内存空间,同时也可以保证类的唯一性,避免出现类的不一致情况。
2.确保类的安全性
在双亲委派机制中,由启动类加载器加载的类是最安全的,而由应用程序自己编写的类则是最不安全的。
这是因为启动类加载器只加载JDK提供的核心类库,而应用程序自己编写的类可能存在安全隐患。
通过使用双亲委派机制,可以确保核心类库的安全性,同时也可以防止应用程序自己编写的类替换掉核心类库中的类,避免恶意代码的潜在危险。
3.提高类加载的效率
由于每个类加载器在加载类之前都会先委托给它的父类加载器去加载,因此,如果父类加载器已经加载过该类,那么子类加载器就不需要再加载一次。
这种机制可以提高类加载的效率,减少资源的消耗。
双亲委派机制流程
Java的双亲委派机制可以概括为以下几个步骤,加载流程如下图所示:
- 当一个类需要被加载时,首先由当前类加载器(称为子加载器)尝试加载该类。
- 如果当前类加载器不能找到该类,则会委托给它的父类加载器去加载。父类加载器会重复步骤1,如果父类加载器找到了该类,则将该类返回给子加载器。
- 如果父类加载器还是找不到该类,则会继续委托给它的父类加载器,直到达到顶层的启动类加载器。
- 如果顶层的启动类加载器也无法找到该类,则该类加载失败,会抛出ClassNotFoundException异常。
- 如果某个类加载器加载了某个类,那么它会将该类的定义缓存起来,以便以后再次请求加载该类时可以直接返回缓存中的定义。
以上就是双亲委派机制的详解,更多JVM内容请查看:JVM(Java虚拟机)从0到1全部合集
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》