类的生命周期

一.初识类的生命周期

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

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

二.类的加载阶段

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

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

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

三.类的连接阶段

1.验证

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

2.准备

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

为什么赋值为0呢?

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

3.解析

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

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

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

四.类的初始化阶段

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

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

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

2.new对象

3.执行该类下的main方法

4.执行class.forName()方法

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

并且

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

相关推荐
lsylalalala7 小时前
JVM(Java虚拟机)
jvm
xieliyu.12 小时前
JVM 垃圾回收机制详解:从标记过程、回收算法到垃圾收集器
java·jvm·笔记·java-ee
此时不提桶,更待何时21 小时前
01-04-B-垃圾回收面试与生产事故实战
java·jvm·面试
kian.wqn1 天前
【JVM核心体系02】JVM 运行时内存区域:堆、栈、元空间、直接内存一次讲清
jvm
用户094248568032 天前
第12章:JDK 诊断工具箱——jps / jstat / jmap / jcmd / jhsdb
java·jvm
程序员阿鹏2 天前
双亲委派机制
java·jvm·数据结构·后端
用户094248568032 天前
第11章:OpenJDK反射、动态代理与 MethodHandle 初探
java·jvm
wuminyu2 天前
纯轻量级锁体系下C2编译器锁粗化和消除机制剖析
java·linux·c语言·jvm·c++
binqian3 天前
【java】Java 两种锁机制与线程阻塞唤醒原理
jvm·spring boot·spring