类的生命周期

一.初识类的生命周期

类的生命周期分为加载,连接,初始化,使用,卸载五个阶段。

其中连接阶段又分为验证,准备,解析三个小阶段。

二.类的加载阶段

类的加载器通过类的全限定名通过不同渠道加载类的字节码信息到内存中,同时在方法区中创键instanceKlass对象,并将字节码信息保存到方法区。同时在堆区中创建java.lang.class对象保存类的方法和字段等信息。并将方法区和堆区建立关联。开发者直接访问堆区就好了

为什么还要使用堆区呢?直接访问方法区不行吗?

方法区基于c和c++实现,java无法直接访问,并且直接访问方法区可能篡改底层代码,造成安全问题。

三.类的连接阶段

1.验证

根据JVM虚拟机规范去验证字节码文件是否符合规范

2.准备

在堆区中为静态变量分配内存并赋值为0,常量直接赋值为固定值

为什么赋值为0呢?

变量中的内存可能没有进行垃圾回收,导致变量是垃圾值。

3.解析

将常量池中的符号引用解析为直接引用

所谓符号引用就是通过字符串编号等文字信息进行查找

而直接引用时通过内存地址进行查找

四.类的初始化阶段

类的初始化阶段会执行字节码文件中clinit方法的字节码指令完成类的初始化。

什么时候触发类的初始化呢?

1.访问静态变量或者静态方法。常量除外。

2.new对象

3.执行该类下的main方法

4.执行class.forName()方法

类之所以初始化都是因为需要用到该类了。

并且

子类完成初始化之前父类一定先初始化。

相关推荐
白露与泡影16 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
Ai_easygo18 小时前
MCP 协议实战:用 Claude Desktop 连本地 SQLite,5 分钟搭一个能查数据的 AI 助手
jvm·人工智能·sqlite
小园子的小菜2 天前
深入理解 JVM 垃圾回收:从对象判定、回收算法到经典收集器全解析
jvm·算法
孫治AllenSun2 天前
【JVM】四大引用类型分析
java·开发语言·jvm
笨笨饿3 天前
101_详解USB协议
java·jvm·数据结构
雪的季节3 天前
Python 垃圾回收触发完整机制
java·jvm·算法
heimeiyingwang3 天前
【架构实战】JVM调优:GC选择与堆内存分配策略
jvm·架构
J-Tony114 天前
【JUC】关于锁的那点事
java·jvm·算法
斑鸠喳喳4 天前
类加载子系统
jvm
youtootech4 天前
HarmonyOS《柚兔学伴》项目实战08-关系型数据库入门——待办事项持久化
jvm·数据库·华为·harmonyos