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

发布时间:2023年12月20日

目录

前言

1. 类加载器的分类:

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

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

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

1.4 自定义类加载器:

2. 双亲委派机制:

我的其他博客


前言

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方法来实现自己的加载逻辑,同时可以选择是否破坏双亲委派机制。

我的其他博客

Git命令大全:从基础到高级应用-CSDN博客

简单介绍一些其他的树-CSDN博客

什么是tomcat?tomcat是干什么用的?-CSDN博客

TCP/IP 四层体系结构-CSDN博客

Redis新数据类型-Bitmaps-CSDN博客

腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足-CSDN博客Synchronized 优化-CSDN博客腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足-CSDN博客

【计算机网络】URL概念及组成-CSDN博客

【计算机网络】TCP socket编程-CSDN博客

枚举类的final修饰-CSDN博客

什么是RabbitMQ-CSDN博客

文章来源:https://blog.csdn.net/AliceNo/article/details/135026649
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。