[JVM] Java类的加载过程

Java类的加载过程

在Java中,类的加载是指在程序运行时将类的二进制数据加载到内存中,并转化为可以被JVM执行的形式的过程。类的加载过程主要包括以下几个步骤:

  1. 加载(Loading):通过类的全限定名,使用类加载器将类的二进制数据加载到JVM中。类加载器会根据类的名称找到对应的字节码文件,并读取字节码文件的内容。

  2. 验证(Verification):在加载类的过程中,JVM会对字节码文件进行验证,确保其符合Java虚拟机规范的约束。验证的内容包括语法、语义以及字节码的合法性等方面。

  3. 准备(Preparation):在准备阶段,JVM会为类的静态变量分配内存,并设置默认的初始值。这些变量包括静态变量和静态常量。

  4. 解析(Resolution):解析阶段是将符号引用转换为直接引用的过程。符号引用是一种编译时的引用,直接引用是可以直接指向内存中的对象的引用。

  5. 初始化(Initialization):在初始化阶段,JVM会执行类的初始化代码,为静态变量赋予正确的初值,并执行静态代码块。初始化阶段是类加载过程的最后一步,只有当一个类被主动引用时才会触发初始化。可以有多种方式触发类的初始化,例如创建类的实例、访问类的静态变量和调用类的静态方法等。

  6. 使用(Using):在初始化完成后,类可以被正常使用,可以创建类的实例、调用类的方法等。

  7. 卸载(Unloading):当类不再被使用时,JVM会卸载该类,并释放相关的内存空间。

需要注意的是,类加载过程中,JVM并不一定需要一次性将所有的类都加载到内存中。JVM采用的是延迟加载(Lazy Loading)的策略,只有当需要使用某个类时才会对其进行加载。此外,JVM还提供了一系列的类加载器,用于从不同的来源加载类的二进制数据,例如本地文件系统、网络、ZIP文件等。

总结起来,类的加载过程包括加载、验证、准备、解析、初始化等阶段,通过这些步骤,Java虚拟机将类的二进制数据加载到内存中,并初始化类的静态变量和代码,使得该类可以被正常使用。

相关推荐
夏天拐跑了西瓜20 小时前
Spring Cloud 微服务实战(三):一个服务挂了,凭什么拖垮整个系统?Sentinel 限流熔断实战
java·spring cloud·微服务
CRMEB定制开发21 小时前
2026年最值得推荐的10大开源商城系统盘点
开发语言·人工智能·开源·商城系统·小程序商城
2601_9672642821 小时前
Jetpack Compose 实践指南:从入门到进阶
java·学习
buhuizhiyuci21 小时前
【QT-百日筑基篇】修真世界摸爬滚打多年,终于黄天不负有心人,突破炼器中期——常用控件QWight的属性
开发语言·c++·qt·gui·图形化
m0_5873830021 小时前
社区家政系统开发实战:从需求分析到上线部署全指南
java·spring boot·spring·需求分析
凤山老林21 小时前
动态 i18n 体系落地:Spring Boot 多租户热加载与前后端协同实践
java·spring boot·后端·i18n
白露与泡影1 天前
解密 Pi 的 Harness 工程:Agent 会话如何实现持久化与恢复
java·人工智能·算法
Littlehero_1211 天前
QT自定义控件之热换站系统(源码开源)
开发语言·qt
meilindehuzi_a1 天前
Python 基础语法(1):常量、变量、类型、输入输出与运算符
开发语言·python
caimouse1 天前
ReactOS 窗口系统分析(5):可见区域与窗口 DC — vis.c + windc.c
c语言·开发语言