类的生命周期

一.初识类的生命周期

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

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

二.类的加载阶段

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

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

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

三.类的连接阶段

1.验证

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

2.准备

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

为什么赋值为0呢?

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

3.解析

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

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

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

四.类的初始化阶段

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

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

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

2.new对象

3.执行该类下的main方法

4.执行class.forName()方法

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

并且

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

相关推荐
J-Tony118 小时前
【JVM】编译&&解释
jvm
J-Tony1112 小时前
【JVM】JVM调优经验
jvm·测试工具
weixin_5231853214 小时前
Java基础知识总结(二):JVM内存结构与变量生命周期
java·开发语言·jvm
吴声子夜歌18 小时前
JVM——并发容器实现原理
java·jvm·并发容器
J-Tony1119 小时前
【JVM】JIT编译器
jvm
吴声子夜歌20 小时前
JVM——原子操作类实现原理
jvm·原子操作类
且听风吟_xincell21 小时前
从零用 TypeScript 写一个 TCP 聊天室(下)——数据持久化、登录验证与管理指令
jvm·tcp/ip·typescript
J-Tony111 天前
【JVM】根可达算法
jvm·算法
wuminyu1 天前
Java锁机制之Java对象重量级锁源码剖析
java·linux·c语言·jvm·c++
J-Tony111 天前
【JVM】垃圾回收
jvm