深入理解什么是双亲委派模型(Java图文详解)
【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!
博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!
吾等采石之人,应怀大教堂之心,愿你们奔赴在各自的热爱中…
文章目录
- 一、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类,而并非我们自定义的,这样就避免了我们恶意篡改核心包的风险
隔离功能:保证核心类库的纯净和安全,防止恶意加载。`
最近比较忙,输出相对缓慢,或许有更重要的事情,下期见……
非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞
深入理解什么是双亲委派模型(Java图文详解)相关推荐
- 双亲委派模型以及SpringFactoriesLoader详解(最全最简单的介绍)
文章目录 前言 类加载的过程 类加载器 何为双亲委派模型 ClassLoader类的loadClass方法 双亲委派模型存在的问题 解决办法 以JDBC驱动管理为例 加载资源 SpringFactor ...
- laravel mysql 视图_Laravel框架控制器,视图及模型操作图文详解
本文实例讲述了Laravel框架控制器,视图及模型操作.分享给大家供大家参考,具体如下: 鉴于上一篇Laravel框架下载,安装及路由操作我们讲到了路由,可能大家会觉得路由这个东西无所不,可路由这个东 ...
- Java 双亲委派模型机制
前言 Java是运行在Java的虚拟机(JVM)中的,在初步学习Java时,我们都知道,编写的Java源代码会被编译器编译成.class的字节码文件.然后ClassLoader负责将这些class文件 ...
- 双亲委派模型为什么要打破双亲委派模型
目录 一:什么是双亲委派模型 二:什么情况下要打破双亲委派模型 三:如何打破 一:什么是双亲委派模型 Java 虚拟机对 class 文件采用的是按需加载的方式(也可以称之为懒加载),也就是说当 需要 ...
- java 打破双亲委派,为什么说java spi破坏双亲委派模型?
虽然有SPI破坏双亲委派模型的说法,但我不太认同.简单说下. 双亲委派模型(再次吐槽下这个翻译),是一种加载类的约定.这个约定的一个用处是保证安全.比如说你写Java用了String类,你怎么保证你用 ...
- Java虚拟机:对象创建过程与类加载机制、双亲委派模型
一.对象的创建过程: 1.对象的创建过程: 对象的创建过程一般是从 new 指令(JVM层面)开始的,整个创建过程如下: (1)首先检查 new 指令的参数是否能在常量池中定位到一个类的符号引用: ( ...
- 28 Java类的加载机制、什么是类的加载、类的生命周期、加载:查找并加载类的二进制数据、连接、初始化、类加载器、双亲委派模型、自定义类加载器
28Java类的加载机制 28.1.什么是类的加载 28.2.类的生命周期 28.2.1.加载:查找并加载类的二进制数据 28.2.2.连接 28.2.3.初始化 28.3.类加载器 28.4.类的加 ...
- Android插件化开发基础之Java类加载器与双亲委派模型
类加载器 Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程. 在加载阶段,java虚拟机需 ...
- 【深入理解JVM】:类加载器与双亲委派模型
转载自 [深入理解JVM]:类加载器与双亲委派模型 类加载器 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因.在类加载的第一阶段" ...
最新文章
- 移动端web设计尺寸_移动端页面设计规范尺寸大起底
- ASP.NET MVC 学习之路-4
- Android开发之虹软人脸识别活体检测SDK包Bitmap转NV21方法
- [css] 如何让一个块元素绝对居中?
- rabbitmq中默认unack超时时间_RabbitMQ 与 Kafka 的技术差异以及使用注意点
- rman全备时,配置项如何设置?
- 软件工程复习提纲——第十章
- 「开源资讯」Sentinel Go 0.4.0 发布,支持热点流量防护能力
- 做下一个互联网时代的“水电公司”——融云的通信云视野与蓝图
- Windows移动热点服务
- java实现户籍管理系统_基于jsp的户籍管理系统-JavaEE实现户籍管理系统 - java项目源码...
- 2021-07-28 cad贱人工具箱5.8
- [经典进程同步问题]哲学家思考
- 驾考 曲线行驶 s弯
- 消失的中国互联网元老陈天桥:为神经科学捐助10亿,不担心机器人崛起
- layer opcode oracle,ORACLE 事件追踪
- 数据湖与数据仓库的新未来:阿里提出湖仓一体架构
- 微商是如何推广的呢?
- Android手机通知栏工具,安卓通知栏美化工具(Flat Style Colored Bars)
- C# 通过反射根据描述特性转换枚举型值