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

news2024/9/29 15:18:35

专栏导航

JVM工作原理与实战

RabbitMQ入门指南

从零开始了解大数据


目录

专栏导航

前言

一、JDK8及之前的类加载器

二、JDK9及之后的类加载器

1.启动类加载器

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

总结


前言

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工作原理与实战(八):类加载器的分类-CSDN博客文章浏览阅读920次,点赞33次,收藏14次。JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了类加载器、类加载器的分类等内容。https://blog.csdn.net/jiangyq_/article/details/135426071JVM工作原理与实战(九):类加载器-启动类加载器-CSDN博客文章浏览阅读1k次,点赞27次,收藏18次。JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了启动类加载器、通过启动类加载器去加载用户jar包等内容。https://blog.csdn.net/jiangyq_/article/details/135445533JVM工作原理与实战(十):类加载器-Java类加载器-CSDN博客文章浏览阅读1k次,点赞27次,收藏16次。​JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了扩展类加载器、通过扩展类加载器去加载用户jar包、应用程序类加载器等内容。 ​https://blog.csdn.net/jiangyq_/article/details/135467954

二、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及之后的类加载器等内容,希望对大家有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1379089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详细分析Java中的@JsonSerialize注解

目录 前言1. 核心知识2. 基本知识3. Demo3.1 jsontest13.2 jsontest2 4. 总结 前言 对应序列化的相关知识可看我之前的文章:详解Java中的serialVersionUID概念以及作用(附上Demo) 通过理解核心知识,再去品味总结的基本知识&#…

助力工业园区作业违规行为检测预警,基于YOLOv8【n/s/m/l/x】全系列参数模型开发构建工业园区场景下作业人员违规行为检测识别系统

在很多工业园区生产作业场景下保障合规合法进行作业生产操作,对于保护工人生命安全降低安全隐患有着非常重要的作用,但是往往在实际的作业生产中,因为一个安全观念的淡薄或者是粗心大意,对于纪律约束等意思薄弱,导致在…

【liunx】线程池+单例模式+STL,智能指针和线程安全+其他常见的各种锁+读者写者问题

线程池单例模式STL,智能指针和线程安全其他常见的各种锁读者写者问题 1.线程池2.线程安全的单例模式3.STL,智能指针和线程安全4.其他常见的各种锁4.读者写者问题 喜欢的点赞,收藏,关注一下把! 1.线程池 目前我们学了挂起等待锁、条件变量、信…

PingCAP 受邀参加 FICC 2023,获 Open100 世纪全球开源贡献奖

2023 年 12 月,2023 国际测试委员会智能计算与芯片联邦大会(FICC 2023)在海南三亚举办,中外院士和数十位领域专家莅临出席。 大会现场 ,开放源代码促进会创始人 Bruce Perens 颁发了 Open100 世纪全球开源贡献奖&…

jmeter和meterSphere如何使用第三方jar包

工具引用jar包语言都是beanshell 问题起因:metersphere 接口自动化实现过程中,如何实现字符串加密且加密方法依赖第三方库; 使用语言:beanshell脚本语言,java语言 使用工具:idea jmeter metersphere 1.首…

C#上位机与欧姆龙PLC的通信12----【再爆肝】上位机应用开发(WPF版)

1、先上图 继上节完成winform版的应用后,今天再爆肝wpf版的,看看看。 可以看到,wpf的确实还是漂亮很多,现在人都喜欢漂亮的,颜值高的,现在是看脸时代,作为软件来说,是交给用户使用的…

个人网站制作 Part 1 创建网站 | Web开发项目

文章目录 👩‍💻 基础Web开发练手项目系列:个人网站制作🚀 项目概述🔧 开发工具和环境配置🛠 项目实现步骤步骤 1: 创建HTML文件步骤 2: 添加CSS样式步骤 3: 链接CSS文件步骤 4: 添加JavaScript交互 &#…

redis夯实之路-键过期与发布订阅详解

设置键的生存时间或过期时间 Setex(单位s),expire(s),pexpire(ms)可以设置键的生存时间, Expirate,pexpirate设置键的过期时间(timestamp的时间…

Surface mesh结构学习

CGAL 5.6 - Surface Mesh: User Manual Surface_mesh 类是半边数据结构的实现,可用来表示多面体表面。它是半边数据结构(Halfedge Data Structures)和三维多面体表面(3D Polyhedral Surface)这两个 CGAL 软件包的替代品…

竞赛保研 基于深度学的图像修复 图像补全

1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学的图像修复 图像补全 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-se…

【二十】【动态规划】879. 盈利计划、377. 组合总和 Ⅳ、96. 不同的二叉搜索树 ,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利…

Gauss消去法(C++)

文章目录 算法描述顺序Gauss消去法列选主元Gauss消去法全选主元Gauss消去法Gauss-Jordan消去法 算法实现顺序Gauss消去法列选主元Gauss消去法全选主元Gauss消去法列选主元Gauss-Jordan消去法 实例分析 Gauss消去法是求解线性方程组较为有效的方法, 它主要包括两个操作, 即消元和…

TypeScript学习笔记、鸿蒙开发学习笔记

变量定义方式 # 变量声明 let msg: string douzi console.log(msg) let num: number 20 console.log(num) let end: boolean true console.log("end" end) let a: any 10 a douzi console.log(a) let p {name:"douzi",age:20} console.log(p.name)…

30天精通Nodejs--第十七天:express-路由配置

目录 引言基础路由配置路由参数与查询参数路由前缀与子路由路由重定向结语 引言 上篇文章我们简单介绍了express的基础用法,包括express的安装、创建路由及项目启动,对express有了一个基础的了解,这篇开始我们将详细介绍express的一些高级用…

docker安装nacos+mysql+配置网络

一、配置网络 为什么要配置网络?因为 Nacos 内要连接MySQL数据库的,我的 MySQL 数据库也是用 Docker启动的,所以2个容器间要通信是需要配置他们使用相同的网络。这个操作要在启动Nacos容器之前。 注意:这里配置的网络只在镜像内部…

聚对苯二甲酸乙二醇酯PET的特性有哪些?UV胶水能够粘接聚对苯二甲酸乙二醇酯PET吗?又有哪些优势呢?

聚对苯二甲酸乙二醇酯(Polyethylene Terephthalate,PET)是一种常见的塑料材料,具有许多特性,包括: 1.化学式: PET的化学式为 (C10H8O4)n,其中n表示重复单元的数量。 2.透明度&#…

掌握 gRPC 和 RPC 的关键区别

一、远程过程调用协议简介 1、RPC 的本质 首先,我们探讨一下什么是 RPC。RPC,缩写为 Remote Procedure Call Protocol,直译来看就是远程过程调用协议。 讲得通俗一些: RPC 是一种通信机制RPC 实现了客户端/服务器通信模型 官…

【大厂秘籍】 - Redis持久化篇

创作不易,你的关注分享就是博主更新的最大动力, 每周持续更新 微信搜索【 企鹅君】关注还能领取学习资料喔,第一时间阅读(比博客早两到三篇) 求关注❤️ 求点赞❤️ 求分享❤️ 对博主真的非常重要 企鹅君原创|GitHub开源项目gith…

【算法】信使(最短路问题)

题目 战争时期,前线有 n 个哨所,每个哨所可能会与其他若干个哨所之间有通信联系。 信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位)。 指挥部设在第一个哨所。 当指挥部下达一个命令…

<软考高项备考>《论文专题 - 63 质量管理(2) 》

2 过程1-规划质量管理 2.1 问题 4W1H过程做什么识别项目及其可交付成果的质量要求、标准,并书面描述项目将如何证明符合质量要求、标准的过程;作用:为在整个项目期间如何管理和核实质量提供指南和方向为什么做1、识别项目/产品质量要求和标…