深入理解什么是双亲委派模型(Java图文详解)
【摘要】
【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、...
【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!
博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!
吾等采石之人,应怀大教堂之心,愿你们奔赴在各自的热爱中…
一、Java类加载器
首先引入一个概念什么是Java类加载器
一句话总结:类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。
官方总结:Java类加载器(英语:Java Classloader)是Java运行时环境(Java Runtime Environment)的一部分,负责动态加载Java类到Java虚拟机的内存空间中。类通常是按需加载,即第一次使用该类时才加载。由于有了类加载器,Java运行时系统不需要知道文件与文件系统。
每个Java类必须由某个类加载器装入到内存。
JVM中有3个默认的类加载器:
1、启动类加载器 (Bootstrap Class Loader)
2、扩展类加载器(Extension Class Loader)
3、应用程序类加载器(Application Class Loader)
为什么要有三个类加载器,一方面是分工,各自负责各自的区块,就如Application Class Loader主要负责加载用户之间开发的代码,另一方面为了实现委托模型。
一个应用程序总是由n多个类组成,Java程序启动时,并不是一次把所有的类全部加载后再运行,它总是先把保证程序运行的基础类一次性加载到jvm中,其它类等到jvm用到的时候再加载。
二、双亲委派模型
第一次听到双亲委派模型这个概念确实有些模糊和不容易理解,我们可以通过图片和实用场景进一步加深对这个概念的学习和了解。
The Java platform uses a delegation model for loading classes. The basic idea is that every class loader
has a “parent” class loader.
When loading a class, a class loader first “delegates” the search for the class to its parent class loader before
attempting to find the class itself.
双亲委派模型,要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。
Java平台通过委派模型去加载类。每个类加载器都有一个父加载器。
1、当需要加载类时,会优先委派当前所在的类的加载器的父加载器去加载这个类。
2、如果父加载器无法加载到这个类时,再尝试在当前所在的类的加载器中加载这个类。
1、因为双亲委派是向上委托加载的,所以它可以确保类只被加载一次,避免重复加载
共享功能:一些framework层级的类一旦被顶层加载器加载,缓存在内存。在其他任何地方用到时,都遵守双亲加载机制,派发到顶层加载器
因已经加载,所以都不需要重新加载。
2、避免核心类被串改:Java的核心API都是通过引导类加载器进行加载的,如果别人通过定义同样路径的类比如java.lang.Integer,类加载器通过向上委托,两个Integer,那么最终被加载的应该是jdk的Integer类,而并非我们自定义的,这样就避免了我们恶意篡改核心包的风险
隔离功能:保证核心类库的纯净和安全,防止恶意加载。`
最近比较忙,输出相对缓慢,或许有更重要的事情,下期见……
非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤️ 分享👥 留言💬thanks!!!
2021年4月24日22:26:48 愿你们奔赴在自己的热爱里!
文章来源: blessing.blog.csdn.net,作者:辰兮要努力,版权归原作者所有,如需转载,请联系作者。
原文链接:blessing.blog.csdn.net/article/details/116108676
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)