深入理解什么是双亲委派模型(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 愿你们奔赴在自己的热爱里!

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员可乐丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值