类的生命周期
一个类从被加载到虚拟机内存开始,到卸载出内存为止,这个生命周期经历了七个阶段:加载、验证、准备、解析、初始化、使用、卸载。
加载阶段:#
- 通过一个类的全限定名来获取定义此类的二进制字节流。
- 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
- 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口
- 在这个过程中, JVM 会给这个类分配一个基本的内存结构, 但是方法, 变量域, 和它引用到的其他类在这个阶段都还没有处理, 也就是说, 这个类在目前阶段还不可用
验证:#
- 验证字节码是否是一个正确,符合规范的类字节码
- 验证阶段有:文件格式校验、元数据校验、字节码校验、符号引用校验。
准备#
- 准备阶段是正式为类中定义的变量(静态变量)分配内存并设置类变量初始值的阶段。
- 为这个类定义好必须的数据结构以表示成员变量域, 方法, 以及实现的接口等等
解析#
- 解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程。
- 把这个类锁引用的其他类全部加载进来 , 引用的方式有如下几种:继承、实现接口、域变量、方法定义、方法中定义的本地变量
初始化#
- 到了初始化阶段,才真正开始执行类中定义的Java字节码。
- 执行类中定义的静态代码块, 初始化静态变量为默认值
作者: 孙晨c
出处:https://www.cnblogs.com/sunbr/p/12829648.html
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· 程序员常用高效实用工具推荐,办公效率提升利器!
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 【译】WinForms:分析一下(我用 Visual Basic 写的)