类的生命周期

一.初识类的生命周期

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

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

二.类的加载阶段

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

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

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

三.类的连接阶段

1.验证

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

2.准备

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

为什么赋值为0呢?

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

3.解析

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

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

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

四.类的初始化阶段

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

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

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

2.new对象

3.执行该类下的main方法

4.执行class.forName()方法

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

并且

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

相关推荐
m0_702036533 小时前
如何通过SQL视图对比两表差异_利用FULL JOIN构建视图
jvm·数据库·python
老纪3 小时前
golang如何实现工作流引擎_golang工作流引擎实现要点
jvm·数据库·python
青云计划4 小时前
JVM从入门到精通
java·jvm
Dicky-_-zhang4 小时前
分布式缓存实战:Redis与多级缓存架构的完整指南
java·jvm
Devin~Y4 小时前
大厂Java面试实录:Spring Boot/Cloud、JVM、Redis、Kafka、MyBatis 到 RAG/Agent 的三轮连环问(含答案详解)
java·jvm·spring boot·redis·spring cloud·kafka·mybatis
2401_850491654 小时前
Bootstrap和OpenLayers结合开发的示例
jvm·数据库·python
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题 第60题】【JVM篇】第20题:垃圾收集算法和垃圾收集器有什么区别?
java·jvm·算法·面试
m0_7020365318 小时前
mysql如何通过索引减少行锁范围_mysql索引与加锁逻辑
jvm·数据库·python
qxwlcsdn18 小时前
如何用 IndexedDB 存储从 API 获取的超大列表并实现二级索引
jvm·数据库·python