当前位置: 首页 > ai >正文

JVM中类加载过程是什么?

引言

在Java程序运行过程中,类的加载是至关重要的环节,它直接关系到程序的执行效率和安全性。类加载不仅仅是简单地将.class文件读取到内存中,而是经历了加载、连接(包含验证、准备和解析)以及初始化等多个复杂步骤,最终将类的结构和行为完整地映射到JVM内存中。通过这一系列过程,JVM能够确保类的正确性、安全性和高效执行,同时支持动态加载和卸载功能。深入理解类加载的全过程,有助于开发者更好地掌握Java的运行机制,优化程序性能,并有效地诊断和解决类加载相关的问题。

类加载过程

加载:通过类的全限定名(包名+类名),获取该类的.class文件的二进制字节流。将二进制字节流所代表静态存储结构,转化为方法区运行时的数据结构。在内存中生成一个代表该类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。(这个阶段需要用到加载器,双亲委派模型与此有关。)

连接:验证、准备、解析3个阶段统称为连接。

验证:确保class文件中的字节流包含的信息,符合当前虚拟机的要求,保证被加载的class类的正确性。(毕竟class文件的产生途径不清楚,如果完全信任的话,很可能载入了有错误的字节码流导致系统崩溃)验证阶段大致会完成四个阶段的检验动作:文件格式校验、元数据验证、字节码验证、符号引用验证。

准备:为类中的静态字段分配内存,并设置默认的初始值,比如int类型初始值是0。被final修饰的static字段不会设置,因为final在编译的时候就分配了。

解析:这个阶段是虚拟机将常量池的符号引用直接替换为直接引用的过程。(符号引用是以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用的时候可以无歧义地定位到目标即可。直接引用可以是直接指向目标的指针、相对偏移量或是一个能间接定位到目标的句柄,直接引用是和虚拟机实现的内存布局相关的。如果有了直接引用,那引用的目标必定已经存在在内存中了。)

初始化:是类加载过程的最后一阶段。准备阶段时,静态变量已经赋过一次系统要求的初始零值,而在初始化阶段,则会根据代码编写的实际情况去初始化类变量和其它资源。简单来说就是执行类的构造器方法。

使用:使用类或者创建对象。

卸载:如果有下面的情况,类就会被卸载:1. 该类所有实例都已经被回收,也就是java堆中不存在该类的任何实例。2. 加载该类的ClassLoader已经被回收。3. 类对应的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射访问该类。


感谢您的阅读!如果文章中有任何问题或不足之处,欢迎及时指出,您的反馈将帮助我不断改进与完善。期待与您共同探讨技术,共同进步!

http://www.xdnf.cn/news/4385.html

相关文章:

  • FPGA 不兼容故障及处理
  • SRS流媒体服务器(3)视频通话环境搭建和源码分析
  • 使用 Vue CLI 和 vuedraggable 实现拖拽排序功能
  • 深度学习赋能:正面吊车载箱号识别系统的核心技术
  • 电子电器架构 --- 48V架构的一丢丢事情
  • 排序算法——计数排序
  • RabbitMQ高级特性
  • RabbitMQ-springboot开发-应用通信
  • 技术分享:Franka机器人新方案——双臂数据采集与适应性安装,带你探索具身智能的奥秘
  • 【温湿度物联网】记录1:寄存器配置
  • RTC实时时钟DS1337S/PT7C4337WEX国产替代FRTC1337S
  • 关于大疆红外图片提取温度方法 python 方法
  • C++ std::sort 函数
  • JC/T 2187-2013 铝波纹芯复合铝板检测
  • 【MySQL】C语言访问数据库
  • 第5讲、Transformer 编码器(Encoder)处理过程详解
  • 世界无人机大会将至,大势智慧以“AI+实景三维”赋能低空经济
  • 从创意到变现:独立创造者的破局之路——解码《Make:独立创造者手册》
  • PyCharm连接WSL2搭建的Python开发环境
  • Kepware 连接Modbus TCP/IP
  • 上海雏鸟科技再赴越南,助力10518架无人机刷新吉尼斯记录
  • MySQL优化-MySQL常见的锁机制
  • 报表的那些事:四部演进史——架构视角下的技术跃迁与实战思考
  • 高防ip是怎么做到分布式防御的
  • 如何用命令行判断一个exe是不是c#wpf开发的
  • win11指定Microsoft Print To PDF的输出路径(电子书djvu转pdf输出路径)
  • dify 部署后docker 配置文件修改
  • docker host模式问题
  • 使用Milvus向量数据库构建具有长期记忆的对话机器人
  • Flowchart 流程图的基本用法