关于类的加载

类加载器

将class文件加载进jvm的方法去,并在方法去中创建一个java.lang.Class对象作为外界访问这个类的接口。实现这个动作的代码模块称为类加载器。

类加载器分类

  1. 启动类加载器(Bootstrap ClassLoader)
  2. 扩展类加载器
  3. 应用程序类加载器
  4. 自定义加载器

启动类加载器

它是Java加载系统的根部,它负责加载Java核心类库(JAVA_HOME/jre/lib/rt.jar中的类库),由于启动类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不同于其他的类加载器,启动类加载器并不继承自java.lang.ClassLoader类。

扩展类加载器

这是一个由Sun的Extension ClassLoader实现的,它负责加载Java的扩展库
(JAVA_HOME/jre/lib/ext或者由系统变量java.ext.dirs指定路径中的类库)

开发者可以直接使用标准扩展目录(ext目录)做类库的扩展。

应用程序类加载器

这是ClassLoader中getSystemClassLoader()方法的返回值,所以也称为系统类加载器
它负责加载环境变量CLASSPATH或者-classpath/-cp命令行选项指定路径中的类库。该类加载器是用户自定义加载器的默认父加载器。

自定义加载器

自定义类加载器(Custom ClassLoader):Java允许我们自定义类加载器,只需要继承java.lang.ClassLoader类,并重写findClass方法即可
这样可以让Java类具有动态加载和热加载的能力,提高了Java程序的灵活性。

类加载过程

  1. 加载:
  2. 连接:
    2.1. 验证
    2.2. 准备
    2.3. 解析
  3. 初始化

加载:

  • 加载是指Java虚拟机查找字节流(查找.class文件),并且根据字节流创建java.lang.class对象的过程。
  • 这个过程,将类的.class文件中的二进制数据读入内存,凡在运行时数据区的方法区内。然后就在堆中创建java.lang.class对象,用来封装类在方法去中的数据结构
  • 类加载阶段
  • (1) Java虚拟机将.class文件读入内存,并为之创建一个Class对象。
  • (2)任何类被使用时系统都会为其创建一个且仅有一个Class对象。
  • (3)这个Class对象描述了这个类创建出来的对象的所有信息,比如有哪些构造方法,都有哪些成员方法,都有哪些成员变量等。

连接:

验证
  • 验证阶段作用是保住Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害。如果验证失败,就会抛出一个java.lang.VerifyError异常或其子类异常。验证过程分为四个阶段:
  • (1)文件格式验证:验证字节流文件是否符合Class文件格式规范,并且能被当前虚拟机正确处理。
  • (2)元数据验证:是对字节码描述信息惊喜语义分析,以保证其描述的信息符合java语言规范要求
  • (3)字节码验证:主要是惊喜数据流和控制流的分析,保证被校验类的方法在运行时不会危害虚拟机
  • (4)符号引用验证:符号引用验证发生在虚拟机将符号转化为直接引用的时候,这个转化动作将在解析阶段发生。
准备
  • 准备阶段为变量分配内存并设置类变量的初始化。这个阶段分配的仅为类的变量,而不包括类的实例变量。对于非final的变量,JVM会将其设置成“零值”,而不是赋值语句的:private static int size = 12 。那么在这个阶段,size的值为0,而不是12.但非final修饰的类变量将会赋值成真实的值。
解析
  • 解析过程是将常量池内的符号引用替换成直接引用,主要包括四类型引用解析。类或接口的解析,字段解析、方法解析、接口方法解析。

初始化:

类加载过程

双亲委派模型

如果一个类接受到请求,他首先将请求交给父类加载器,直至找到启动类加载器,如果父类加载器加载失败,当前类加载器才会自己加载类。

为什么要使用双亲委派模型:防止类重复加载,保护核心的类

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

testvue-新增图表功能(教师那边-后续放到管理员那边)-src/main.js ,router/index.js

1.安装--然后在src/main.js中 导入 和 使用2修改:common/sidebar.vue ,page/ echarts.vue , router/index.js , src/main.js3sidebar.vue <template><div class="sidebar"><el-menuclass="sidebar-el-menu":default-active="onRo…

网络编程:数据库实现增删改

1.数据库实现增删改 程序代码&#xff1a; 1 #include<myhead.h>2 //定义添加数据函数3 int do_add(sqlite3*ppDb)4 {5 //准备sql语句6 int add_numb;//工号7 char add_name[20];//姓名8 double add_salary;9 printf("请输入要添加的工号:&quo…

JavaScript极速入门(1)

初识JavaScript JavaScript是什么 JavaScript(简称JS),是一个脚本语言,解释型或者即时编译型语言.虽然它是作为开发Web页面的脚本语言而著名,但是也应用到了很多非浏览器的环境中. 看似这门语言叫JavaScript,其实在最初发明之初,这门语言的名字其实是在蹭Java的热度,实际上和…

f5——>字符串三角

暴力破解&#xff0c;双层循环&#xff0c;注意复制到新列表用append&#xff0c;这样更不容易出错 格式还是“”.join(str)

HBase 的安装与部署

目录 1 启动 zookeeper2 启动 Hadoop3 HBase 的安装与部署4 HBase 高可用 1 启动 zookeeper [huweihadoop101 ~]$ bin/zk_cluster.sh start2 启动 Hadoop [huweihadoop101 ~]$ bin/hdp_cluster.sh start3 HBase 的安装与部署 &#xff08;1&#xff09;将 hbase-2.0.5-bin.tar.…

git:git revert 和git reset 回退版本的使用方式

目录 git revert还原某些现有提交git reset删除提交参考 git revert还原某些现有提交 中文文档&#xff1a;https://git-scm.com/docs/git-revert/zh_HANS-CN 版本会递增&#xff0c;不影响之前提交的内容 例如&#xff1a;撤销记录为 abc123 的提交 git revert abc123git r…

解决/sys/kernel/debug/下没有任何文件的

问题&#xff1a; /sys/kernel/debug目录下没有任何信息 解决&#xff1a; 首先检查Debug Filesystem是否选中&#xff0c;其位置是&#xff1a; Kernel hacking -> Compile-time checks and compiler options -> Debug Filesystem 打开configs文件查看是否为y: arch/arm…

视频压缩软件哪个好用?强推这五款压缩软件

在数字化时代&#xff0c;我们每天都会接触到大量的视频内容&#xff0c;无论是在工作中制作视频&#xff0c;还是在日常生活中分享或观看。然而&#xff0c;随着高清晰度和4K视频的普及&#xff0c;视频文件的大小也逐渐增加&#xff0c;对存储空间和网络传输速度提出了更高的…

Android14音频进阶:AIDL数据转换关键图解(五十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

自研在线CAD系统介绍

去年调研了已有的在线的CAD系统(悟空CAD、维杰地图、梦想控件)&#xff0c;基本上都是按年收费&#xff0c;还相当的贵&#xff0c;基于此&#xff0c;就萌生了自己研发CAD系统的想法&#xff0c;从技术选型、框架设计、代码实现基本为都是自研实现。已经有了初步的成果。 10M…

智能设备 app 设计 —— 蓝蓝 UI 设计公司

今天给大家推荐是智能设备app设计&#xff0c;随着智能设备的逐渐普及随之操作app也越来越多&#xff0c;希望能给大家带来灵感 #日常灵感 #创意设计#UI提升#ui设计#app #设计案例分享|#设计 #产品设计#产品设计#设计灵感 #B端产品经理 #ui #产品 #美工 #交互 #产品经理 #开发 …

如何基于 esp-at 固件测试 TCP (UART 转 WiFi 透传)吞吐?

测试工具&#xff1a; windows/Ubuntu/Android&#xff08;电脑或手机与 ESP 开发板连接相同路由器&#xff09;iperf2 工具ESP 系列的开发板USB-TTL 串口调试工具路由器 测试固件&#xff1a; AT 固件 AT 固件硬件接线说明 不同环境下的 Iperf 工具安装说明 Iperf 工具用于…

2024 年 AI 辅助研发趋势:从研发数字化到 AI + 开发工具 2.0,不止于 Copilot

在上一年里&#xff0c;已经有不少的企业在工具链上落地了生成式 AI&#xff0c;结合我们对于这些企业的分析&#xff0c;以及最近在国内的一些 “新技术” 趋势&#xff0c;诸如于鸿蒙原生应用的初步兴起。从这些案例与趋势中&#xff0c;我们也看到了一些新的可能方向。 结合…

论文解读:Meta-Baseline: Exploring Simple Meta-Learning for Few-Shot Learning

文章汇总 总体问题 通过对整体分类的训练(文章结构图中ClassifierBaseline)&#xff0c;即在整个标签集上进行分类&#xff0c;它可以得到与许多元学习算法相当甚至更好的嵌入。这两种工作之间的界限尚未得到充分的探索&#xff0c;元学习在少样本学习中的有效性仍然不清楚。…

(亲测可用)Adobe Photoshop 2024下载与安装

背景介绍&#xff1a;Adobe Photoshop 2024 是全球最受欢迎的图像编辑软件之一&#xff0c;2024年的版本带来了一系列令人印象深刻的功能&#xff1a; AI增强的自动选择和蒙版工具&#xff1a;现在&#xff0c;用户可以更轻松地选择和处理复杂的图像元素。更多的3D渲染功能&…

算法刷题day23:双指针

目录 引言概念一、牛的学术圈I二、最长连续不重复序列三、数组元素的目标和四、判断子序列五、日志统计六、统计子矩阵 引言 关于这个双指针算法&#xff0c;主要是用来处理枚举子区间的事&#xff0c;时间复杂度从 O ( N 2 ) O(N^2) O(N2) 降为 O ( N ) O(N) O(N) &#xf…

全志D1s开发板裸机开发之坏境搭建

环境搭建 开发板介绍 张天飞老师编写的《RISC-V体系结构编程与实践》&#xff0c;里面的源码是基于 QEMU 模拟器的&#xff0c;可以认为它是一款虚拟的开发板。如果需要在真实开发板上学习&#xff0c;可以使用百问网的 DongshanPI-D1S 开发板。 DongshanPI-D1S 是百问网推出…

六、矩阵问题

73、矩阵置零&#xff08;中等&#xff09; 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a…

探索AI视频创新:Sora的奇迹

探索AI视频创新&#xff1a;Sora的奇迹 随着科技的不断演进&#xff0c;AI视频模型已经成为人工智能领域的一颗新星。在这场技术的风暴中&#xff0c;OpenAI的Sora模型以其杰出的性能和前瞻性的技术脱颖而出&#xff0c;正引领着AI视频领域的全新创新浪潮。 Sora的技术之光 …

Net8集成AutoMap

一、概述 使用Net8 搭建WebApi&#xff0c;需要集成AutoMap&#xff0c;方便开发。 二、实现 2.1 安装 AutoMapper 2.2 创建AutoProfile配置类继承Profile namespace AnNeng.Cad.WebApi.Config {using AnNeng.Service.Application.CadAndOss.Dto;using AnNeng.Service.Appl…