JVM类加载器的分类以及双亲委派机制

简介: JVM类加载器的分类以及双亲委派机制

前言

Java虚拟机(JVM)的类加载器(ClassLoader)负责将类的字节码加载到内存中,并将其转换为运行时的类。类加载器在Java中有不同的分类,而双亲委派机制是一种类加载器之间的协作机制,用于保证类的唯一性和安全性。

1. 类加载器的分类:

1.1 启动类加载器(Bootstrap ClassLoader):

这是Java虚拟机的一部分,用于加载Java的核心类库,如java.lang包中的类。它是JVM的一部分,通常用本地代码来实现,不是Java类。

1.2 扩展类加载器(Extension ClassLoader):

负责加载Java的扩展类库,位于java.ext.dirs系统属性所指定的目录中。通常是<JAVA_HOME>/lib/ext目录。

1.3 应用程序类加载器(Application ClassLoader):

也被称为系统类加载器,负责加载应用程序classpath下的类。它是ClassLoader类的子类,通常由Java虚拟机的实例化进程实例化。

1.4 自定义类加载器:

开发者可以通过继承ClassLoader类来自定义类加载器,实现自己的加载逻辑。这样的类加载器被称为用户自定义类加载器。

2. 双亲委派机制:

双亲委派机制是一种层次化的类加载器结构,保证类的唯一性和安全性。当一个类加载器收到加载类的请求时,它首先会检查这个类是否已经被加载过,如果已经加载过,就直接返回该类的Class对象;如果未加载过,它会将请求委派给父类加载器去加载,一直向上委派,直到到达启动类加载器。

作流程如下:

  1. 当一个类加载器收到加载类的请求时,先检查该类是否已经加载。
  2. 如果已加载,直接返回Class对象。
  3. 如果未加载,将加载请求委派给父类加载器。
  4. 父类加载器按照同样的方式继续检查,直到到达启动类加载器。
  5. 如果启动类加载器无法加载该类,子类加载器尝试自己加载类。
  6. 如果子类加载器加载成功,返回Class对象;如果失败,报ClassNotFoundException。

这种机制的好处是避免了重复加载,确保类的唯一性,同时也提高了安全性,防止恶意类的加载。

自定义类加载器时,通常需要重写findClass方法来实现自己的加载逻辑,同时可以选择是否破坏双亲委派机制。

相关文章
|
1月前
|
安全 Java 应用服务中间件
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
什么是类加载器,类加载器有哪些;什么是双亲委派模型,JVM为什么采用双亲委派机制,打破双亲委派机制;类装载的执行过程
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
|
8天前
|
缓存 前端开发 Java
JVM知识体系学习二:ClassLoader 类加载器、类加载器层次、类过载过程之双亲委派机制、类加载范围、自定义类加载器、编译器、懒加载模式、打破双亲委派机制
这篇文章详细介绍了JVM中ClassLoader的工作原理,包括类加载器的层次结构、双亲委派机制、类加载过程、自定义类加载器的实现,以及如何打破双亲委派机制来实现热部署等功能。
19 3
|
1月前
|
Arthas Java 测试技术
JVM —— 类加载器的分类,双亲委派机制
类加载器的分类,双亲委派机制:启动类加载器、扩展类加载器、应用程序类加载器、自定义类加载器;JDK8及之前的版本,JDK9之后的版本;什么是双亲委派模型,双亲委派模型的作用,如何打破双亲委派机制
JVM —— 类加载器的分类,双亲委派机制
|
16天前
|
前端开发 Java 应用服务中间件
JVM进阶调优系列(1)类加载器原理一文讲透
本文详细介绍了JVM类加载机制。首先解释了类加载器的概念及其工作原理,接着阐述了四种类型的类加载器:启动类加载器、扩展类加载器、应用类加载器及用户自定义类加载器。文中重点讲解了双亲委派机制,包括其优点和缺点,并探讨了打破这一机制的方法。最后,通过Tomcat的实际应用示例,展示了如何通过自定义类加载器打破双亲委派机制,实现应用间的隔离。
|
2月前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
45 0
|
2月前
|
开发者 C# Windows
WPF布局大揭秘:掌握布局技巧,轻松创建响应式用户界面,让你的应用程序更上一层楼!
【8月更文挑战第31天】在现代软件开发中,响应式用户界面至关重要。WPF(Windows Presentation Foundation)作为.NET框架的一部分,提供了丰富的布局控件和机制,便于创建可自动调整的UI。本文介绍WPF布局的基础概念与实现方法,包括`StackPanel`、`DockPanel`、`Grid`等控件的使用,并通过示例代码展示如何构建响应式布局。了解这些技巧有助于开发者优化用户体验,适应不同设备和屏幕尺寸。
48 0
|
8天前
|
存储 安全 Java
jvm 锁的 膨胀过程?锁内存怎么变化的
【10月更文挑战第3天】在Java虚拟机(JVM)中,`synchronized`关键字用于实现同步,确保多个线程在访问共享资源时的一致性和线程安全。JVM对`synchronized`进行了优化,以适应不同的竞争场景,这种优化主要体现在锁的膨胀过程,即从偏向锁到轻量级锁,再到重量级锁的转变。下面我们将详细介绍这一过程以及锁在内存中的变化。
23 4
|
2月前
|
Java Docker 索引
记录一次索引未建立、继而引发一系列的问题、包含索引创建失败、虚拟机中JVM虚拟机内存满的情况
这篇文章记录了作者在分布式微服务项目中遇到的一系列问题,起因是商品服务检索接口测试失败,原因是Elasticsearch索引未找到。文章详细描述了解决过程中遇到的几个关键问题:分词器的安装、Elasticsearch内存溢出的处理,以及最终成功创建`gulimall_product`索引的步骤。作者还分享了使用Postman测试接口的经历,并强调了问题解决过程中遇到的挑战和所花费的时间。
|
8天前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
29 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
11天前
|
存储 缓存 算法
JVM核心知识点整理(内存模型),收藏再看!
JVM核心知识点整理(内存模型),收藏再看!
JVM核心知识点整理(内存模型),收藏再看!