[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虚拟机将类的二进制数据加载到内存中,并初始化类的静态变量和代码,使得该类可以被正常使用。

相关推荐
土司大王几秒前
LeetCode hot100——51.N 皇后:Java 回溯模板、列与对角线剪枝、O(n!) 复杂度分析
java·leetcode·剪枝
无忧.芙桃11 分钟前
C++内存管理
c语言·开发语言·c++·青少年编程
Patrick在香港13 分钟前
Python 分析香港 AQHI 归档 1644 天:同一天的空气,早上 8 点报 3,下午 5 点报 10
开发语言·python·数据分析·api·restful·数据可视化·开放数据
重生之小比特14 分钟前
【Java SE】IDEA 调试 Debug 案例完整分析
java·ide·intellij-idea
晴天1615 分钟前
JavaScript 与 Java 垃圾回收机制对比
java·开发语言·javascript
金金计较.17 分钟前
Go语言-2
开发语言·算法·golang
3Q工具箱 - BraggTroy25 分钟前
Python + PyInstaller 实战:从零打造 10 个 Windows 桌面小工具(附全部踩坑记录与核心代码)
开发语言·windows·python
xiaohua100925 分钟前
JVM内存优化-jemalloc
java·jvm
吃饱了得干活29 分钟前
Redisson 进阶实战:看门狗机制与分布式锁完全指南
java·redis·后端
淘源码d37 分钟前
基于Java开发的上门家政系统源码,采用SpringBoot+MySQL+UniApp+Vue3技术栈,构建三端一体化平台
java·源码·上门家政·家政系统·同城家政·源码部署