JVM工作原理与实战(十四):JDK9及之后的类加载器

前言

JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了JDK8及之前的类加载器、JDK9及之后的类加载器等内容。 ​


一、JDK8及之前的类加载器

JDK8及之前的版本中,扩展类加载器和应用程序类加载器的源码位于rt.jar包中的sun.misc.Launcher.java。默认的类加载器层次结构如下:

  • 启动类加载器(Bootstrap):这是最顶层的类加载器,负责加载Java的核心类库,如java.lang包中的类等。它是用C++编写的,是Java虚拟机底层实现的一部分。
  • 扩展类加载器(Extension):这是Bootstrap的子类加载器,负责加载Java的扩展类库。它是ClassLoader的子类,通过调用父类的loadClass()方法来加载类。
  • 应用程序类加载器(Application):这是Extension的子类加载器,负责加载应用程序的类。它是ClassLoader的子类,通过调用父类的loadClass()方法来加载类。

详细讲解可以查看之前的文章:

JVM工作原理与实战(八):类加载器的分类 - 掘金 (juejin.cn)

JVM工作原理与实战(九):类加载器-启动类加载器 - 掘金 (juejin.cn)

JVM工作原理与实战(十):类加载器-Java类加载器 - 掘金 (juejin.cn)

二、JDK9及之后的类加载器

在JDK9发布之后,Java引入了模块化系统,导致类加载器在设计上产生了重大变革。为了适应这一变化,Java类被封装在jmod文件中,并保存在名为jmods的文件夹中。这样的结构有助于更好地管理和组织Java类,同时提高代码的可维护性和安全性。

1.启动类加载器

在JDK 9及之后的版本中,启动类加载器是用Java编写的,并位于jdk.internal.loader.ClassLoaders类中。

在Java中,BootClassLoader从模块中寻找要加载的字节码资源文件,这是通过继承自内置类加载器BuiltinClassLoader并实现相应的功能来实现的。

值得注意的是,启动类加载器仍然无法通过Java代码直接获取,返回值仍然是null,从而保持了统一性。

2.平台类加载器(扩展类加载器)

在JDK 9及之后,扩展类加载器被替换为平台类加载器。这个类加载器遵循模块化方式加载字节码文件,因此它的继承关系从URLClassLoader变为了BuiltinClassLoader。BuiltinClassLoader实现了从模块中加载字节码文件的功能。平台类加载器的存在更多的是为了与老版本的设计方案兼容,自身并没有特殊的逻辑。


总结

JVM是Java程序的运行环境,负责字节码解释、内存管理、安全保障、多线程支持、性能监控和跨平台运行。本文主要介绍了JDK8及之前的类加载器、JDK9及之后的类加载器等内容,希望对大家有所帮助。

相关推荐
chxii1 小时前
5java集合框架
java·开发语言
IsPrisoner2 小时前
Go语言安装proto并且使用gRPC服务(2025最新WINDOWS系统)
开发语言·后端·golang
yychen_java2 小时前
R-tree详解
java·算法·r-tree
JANYI20183 小时前
嵌入式设计模式基础--C语言的继承封装与多态
java·c语言·设计模式
xrkhy3 小时前
反射, 注解, 动态代理
java
Ten peaches3 小时前
Selenium-Java版(操作元素)
java·selenium·测试工具·html
tan180°3 小时前
Linux进程信号处理(26)
linux·c++·vscode·后端·信号处理
lyw2056194 小时前
RabbitMQ,Kafka八股(自用笔记)
java
邹诗钰-电子信息工程4 小时前
嵌入式自学第二十一天(5.14)
java·开发语言·算法