关注
1. 定义
- 双亲委派机制是Java虚拟机(JVM)加载类的一种机制。当一个类加载器(ClassLoader)收到类加载请求时,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成。只有当父类加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到对应的类)时,子加载器才会尝试自己去加载。
2. 类加载器层次结构
- 启动类加载器(Bootstrap ClassLoader):它是最顶层的类加载器,负责加载Java核心类库,如 java.lang.Object 等。它是由C++实现的,是JVM的一部分,没有对应的Java类。
- 扩展类加载器(Extension ClassLoader):它的父加载器是启动类加载器。主要负责加载Java的扩展类库,位于 jre/lib/ext 目录下的类。
- 应用程序类加载器(Application ClassLoader):也叫系统类加载器,它的父加载器是扩展类加载器。它负责加载用户类路径( classpath )下的类,这是我们在开发应用程序时最常用的类加载器。
3. 工作过程示例
- 假设我们在应用程序中使用了 java.util.ArrayList 这个类。当应用程序类加载器收到加载 ArrayList 的请求时,它会先把这个请求委派给父加载器(扩展类加载器)。扩展类加载器又会把请求委派给它的父加载器(启动类加载器)。启动类加载器会在自己负责的核心类库中查找 ArrayList ,找到后就加载这个类。如果启动类加载器没有找到,就会把请求返回给扩展类加载器,扩展类加载器在自己的扩展类库中查找,以此类推。只有当所有父加载器都无法加载时,应用程序类加载器才会自己尝试在 classpath 中查找和加载 ArrayList 。
4. 优势
- 安全性:可以保证Java核心类库的安全性。例如,用户不能自己定义一个 java.lang.Object 类来替代JVM中的核心 Object 类,因为启动类加载器会优先加载真正的核心类库中的 Object 类。
- 避免重复加载:保证类在整个JVM中只加载一次。如果父加载器已经加载了某个类,子加载器就不需要再加载,提高了加载效率并且避免了冲突。
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 秋招什么时候开投比较合适? #
23701次浏览 318人参与
# 百度工作体验 #
223389次浏览 1972人参与
# 现代汽车前瞻技术研发急速编程挑战赛 #
27960次浏览 216人参与
# 机械人与华为的爱恨情仇 #
117155次浏览 946人参与
# 发工资后,你做的第一件事是什么 #
68154次浏览 229人参与
# 机械人集合!你是什么工程师? #
15805次浏览 89人参与
# 你觉得实习能学到东西吗 #
36307次浏览 712人参与
# 找不到好工作选择GAP真的丢人吗 #
78265次浏览 938人参与
# 我想去国央企的原因 #
59993次浏览 393人参与
# 如何准备秋招 #
20667次浏览 390人参与
# 工作中哪个瞬间让你想离职 #
25909次浏览 177人参与
# 入职第四天,心情怎么样 #
29451次浏览 417人参与
# 拼多多工作体验 #
28540次浏览 197人参与
# 多益网络求职进展汇总 #
29228次浏览 134人参与
# 快手求职进展汇总 #
547098次浏览 6001人参与
# 硬件应届生薪资是否普遍偏低? #
74083次浏览 514人参与
# 不考虑转正,实习多久合适 #
32324次浏览 145人参与
# 面试中,你被问过哪些奇葩问题? #
68553次浏览 796人参与
# 你们公司几号发工资 #
21227次浏览 140人参与
# 如果再来一次,你还会学硬件吗 #
125786次浏览 1402人参与
# 实习,不懂就问 #
46386次浏览 693人参与