类加载过程,以及什么是双亲委派?

简介: 类加载过程,以及什么是双亲委派?

类的加载机制


image.png

如图,我们自己写的Java文件到最终运行,它必须要经过编译和类加载这两个阶段, 而编译的过程就是.java文件编译成.class文件,而类的加载就是把.class文件加载到JVM内存里面,装载完成以后会得到一个Class对象,我们就可以使用new关键字,来实例化这个对象。


image.png


一个类从被加载到虚拟机内存中开始,到卸载出内存,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。


而类的加载过程涉及到类加载器,JVM在运行过程的时候会产生三个类加载器


image.png

这三个类加载器呢,组成一个层级关系,每一个类加载器,分别去加载不同作用范围的jar包,比如说Bootstrap、ClassLoader,它主要是负责Java核心类库的加载


也就是%{jJDK_HOME}\lib下面的rt.jarresources.jar等等的,Extension ClassLoader主要负责%{jJDK_HOME}\lib\ext目录下的一个jar包和class文件

Application ClassLoader 主要负责当前应用里面classpath下面的所有jar包和类文件,除了系统自己提供的类加载器以为,还可以通过ClassLoader类来实现自定义加载器,去满足一些特殊的场景需求


双亲委派


image.png


而所谓的双亲委派,就是按照类加载器的层级关系,逐层进行委派,比如说当我们需要加载一个class文件,首先会去吧这个class文件的查询和加载委派给父加载器去执行,如果父加载器都无法加载,那么再尝试自己来加载这样一个class。


双亲委派设计的好处


  1. 安全性,因为这种层级关系,实际上代表的是一种优先级,也就是所有的类加载,优先要给到Bootstrap ClassLoader,那么对于核心类库中的一些类,就没有办法被破坏,比如说自己写一个java.lang,String,最终还是会交给启动类加载器,再加上每个类加载器的本身一个作用范围,那么自己写的java.lang,String就没有办法覆盖类库中的类。


  1. 避免重复加载导致程序混乱,因为如果父加载器已经加载过了,那么子加载器就没有必要再去加载


相关文章
|
6月前
|
存储 Java 编译器
类加载机制和双亲委派机制
类加载机制和双亲委派机制
|
前端开发 安全 Java
JVM类加载和双亲委派机制
JVM类加载和双亲委派机制
138 0
|
5天前
|
Java
类加载器和双亲委派机制
从父类加载器到子类加载器分别为: BootStrapClassLoader 加载路径为:JAVA_HOME/jre/lib ExtensionClassLoader 加载路径为:JAVA_HOME/jre/lib/ext ApplicationClassLoader 加载路径为:classpath 还有一个自定义类加载器
|
2月前
|
Arthas Java 测试技术
JVM —— 类加载器的分类,双亲委派机制
类加载器的分类,双亲委派机制:启动类加载器、扩展类加载器、应用程序类加载器、自定义类加载器;JDK8及之前的版本,JDK9之后的版本;什么是双亲委派模型,双亲委派模型的作用,如何打破双亲委派机制
JVM —— 类加载器的分类,双亲委派机制
|
6月前
|
Java
【JVM】双亲委派机制、打破双亲委派机制
【JVM】双亲委派机制、打破双亲委派机制
55 1
|
6月前
|
前端开发 Java 开发者
JVM类加载器的分类以及双亲委派机制
JVM类加载器的分类以及双亲委派机制
|
存储 缓存 安全
JVM面试专题-双亲委派机制(父类委托机制)
JVM面试专题-什么是双亲委派机制(父类委托机制)?如何打破双亲委派机制?双亲委派机制的优缺点?什么是沙箱安全机制呢?
203 1
|
6月前
|
前端开发 Java API
JVM 类加载器 双亲委派机制
【1月更文挑战第3天】JVM 类加载器 双亲委派机制
|
6月前
|
缓存 安全 前端开发
JVM(类的加载与ClassLoader、双亲委派机制)
JVM(类的加载与ClassLoader、双亲委派机制)
|
前端开发 Java
05-说下类加载器和双亲委派机制
在明白了整个类从加载到初始化的过程,接下来我们有必要来说下类加载器的概念,因为实现上述过程是必须依靠加载器来实现的。
68 0
05-说下类加载器和双亲委派机制