双亲委派机制的由来

简介: 我们java中所有的类都需要通过类加载器来加载,所有的类分成三类,分别是应用程序类、扩展类、引导类,对应的类加载器分别是应用程序类加载器、扩展类加载器、引导类加载器。

什么是双亲委派机制?



首先我们通过一个简单的例子来理解以下,首先我们先来理解委派机制,顾名思义委派就相当于一个用户委派快递员寄快递,这个过程是单项的,不可能换成快递员委派用户来寄快递。然后我们再理解一下单亲委派机制,单亲委派机制就相当于儿子放假了回家给父亲要生活费,父亲必须得给儿子生活费,这是单亲委派机制。那么双亲委派机制就是儿子给父亲要生活费,父亲如果有就给儿子生活费,如果没有就告诉儿子让他自己去赚,这就是双亲委派机制。


什么是类加载器?



我们java中所有的类都需要通过类加载器来加载,所有的类分成三类,分别是应用程序类、扩展类、引导类,对应的类加载器分别是应用程序类加载器、扩展类加载器、引导类加载器。


应用程序类:就是我们自己定义的例如User类、Persion类等。


扩展类:主要是jre/lib/ext目录下的一些类。


引导类:就是java的一些核心类库,例如String类等。


类加载器与双亲委派机制的关系?

其实上面提到的三个类加载器之间就使用了双亲委派机制,所以双亲委派机制就说的是类加载器之前的关系。


其中应用程序类就相当于儿子,扩展类就相当于父亲,引导类就相当于爷爷。当我们自己写了一个User类想要运行的时候。


1、首先是应用程序类在自己已加载的类库中找有没有名字为User的类,因为一开始所有的类加载器都没有加载任何类,所以应用程序类加载器在自己已加载的类库中找不到名字为User的类,然后应用程序类就去问他父亲扩展类加载器有没有加载这个User类。


2、然后扩展类加载器发现自己已加载的类库也没有这个User类,然后扩展类加载器就找自己的父亲引导类加载器问他有没有加载过User类。


3、然后扩展类加载器发现自己的已加载类库里面也没有这个User类。


4、然后扩展类加载器开始在自己未加载的类库里面找有没有User类,发现未加载的类库也没有User类,然后他就把任务传给引导类加载器。


5、引导类加载器收到任务后去自己未加载的类库里面找有没有User类,发现也没有User类,然后他就把任务传给应用程序类加载器。


6、应用程序类加载器收到任务后去自己未加载的类库里面找,发现有User类,然后就将User类加载到自己的已加载类库里面。当下一次再运行User类的时候,直接从应用程序类加载器的已加载类库就可以找到User类,就不用再去其它类加载器里面找了。


双亲委派机制的作用?



安全:如果自己想写一个String类来扰乱系统的核心String类是不可能的,因为在引导类加载器中加载了就不会去应用程序类加载器中加载了。


避免类的重复加载:当父类加载器加载了该类后,就没有必要子类加载器再次加载了,保证被加载类的唯一性。

相关文章
|
7月前
|
存储 Java 编译器
类加载机制和双亲委派机制
类加载机制和双亲委派机制
|
4月前
|
Java 编译器
什么是双亲委派机制?
什么是双亲委派机制?
260 59
|
4月前
|
前端开发 Java C++
双亲委派机制
这篇文章详细解释了Java中的双亲委派机制,包括其原理、类加载器的分类(启动类加载器、扩展类加载器、应用程序类加载器)以及它们之间的关系和作用。
|
7月前
|
Java
【JVM】双亲委派机制、打破双亲委派机制
【JVM】双亲委派机制、打破双亲委派机制
55 1
|
6月前
|
安全 前端开发 Java
程序与技术分享:1.2双亲委派机制及其原理
程序与技术分享:1.2双亲委派机制及其原理
|
7月前
|
监控 安全 前端开发
JVM工作原理与实战(十二):打破双亲委派机制-自定义类加载器
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了打破双亲委派机制的方法、自定义类加载器等内容。
83 1
|
Java 关系型数据库 MySQL
双亲委派机制,懂吧~ 那什么情况下需要破坏它,知道吗?
双亲委派机制,懂吧~ 那什么情况下需要破坏它,知道吗?
103 0
|
7月前
|
安全 前端开发 Java
【JVM】双亲委派机制详细解读(通俗易懂)
【JVM】双亲委派机制详细解读(通俗易懂)
618 0
|
Java 应用服务中间件 API
打破双亲委派机制
打破双亲委派机制
57 0
|
Java 应用服务中间件
JVM - 彻底理解打破双亲委派机制
JVM - 彻底理解打破双亲委派机制
122 0
JVM - 彻底理解打破双亲委派机制