JAVA-大白话探索JVM-类加载过程(二)
首先我们知道JVM是什么以及类加载器的作用
不清楚的可以看看
JAVA-大白话探索JVM-类加载器(一)
现在我们来摸索下类的加载过程
首先,我们将类加载过程分为三步走
- 装载
- 链接
- 初始化
其中 链接 分为三步骤
1.装载
- 通过一个类的全限定名获取其定义的二进制字节流
- 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
- 在堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口
2.链接
-
验证
-
确保Class文件的字节流信息符合JVM的要求
-
4个阶段校验(文件格式校验、元数据校验、字节码校验、符号引用校验)
-
验证阶段是非常重要的,但不是必须的,它对程序运行期没有影响,如果所引用的类经过反复验证,那么可以考虑采用-Xverifynone参数来关闭大部分的类验证措施,以缩短虚拟机类加载的时间。
-
-
准备
- 为类的静态变量(static)分配内存,并将其初始化为默认值
-
解析
-
把类中的符号引用转换为直接引用
-
符号引用就是一组符号来描述目标,可以是任何字面量。
-
直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。
-
3.初始化
对类的静态变量,静态代码块执行初始化操作
版权声明:本文为不会代码的小白原创文章,转载需添加小白地址 :https://www.ccode.live/bertonlee/list/7
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战