JVM的类的生命周期

前言

Java虚拟机(JVM)中的类生命周期包括加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Usage)和卸载(Unloading)七个阶段。

1. 加载(Loading):

在加载阶段,Java虚拟机通过类加载器找到并加载类的字节码文件。加载阶段是类生命周期的开始阶段。

2. 验证(Verification):

在验证阶段,Java虚拟机对字节码进行验证,以确保其符合Java语言规范。这一步主要是为了确保被加载的类是合法、安全的。

3. 准备(Preparation):

在准备阶段,Java虚拟机为类的静态变量分配内存并设置默认初始值。这些变量在方法区中分配内存。

4. 解析(Resolution):

在解析阶段,Java虚拟机将常量池中的符号引用转化为直接引用。这一步可以理解为在编译期间无法确定的符号引用在运行期间通过解析变为可直接引用的过程。

5. 初始化(Initialization):

在初始化阶段,Java虚拟机执行类的初始化方法(<clinit>),该方法包含类中静态变量的赋值和静态代码块的执行。初始化是类生命周期中的最后一个阶段,也是类首次主动使用的时候。

6. 使用(Usage):

在使用阶段,类被正常使用,包括对象的创建、调用类的方法等。

7. 卸载(Unloading):

在卸载阶段,Java虚拟机可以卸载已经加载的类,释放相应的内存空间。类卸载通常发生在类加载器被回收的时候,同时要求类没有任何实例存在,并且没有任何地方引用该类。

需要注意的是,类生命周期中并非所有的阶段都是必需的,例如解析阶段可以在初始化之后再进行。在实际运行中,如果一个类在初始化阶段中被执行了,那么它就会一直处于已初始化状态,不会再进入加载、验证、准备等阶段。类的生命周期是由虚拟机规范所规定的,不同的虚拟机实现可能会有一些细微的差异。

相关推荐
yexuhgu2 分钟前
C#怎么实现线程安全的单例_C#如何使用Lazy延迟加载【核心】
jvm·数据库·python
X56614 分钟前
什么是Bootstrap的移动优先响应式设计
jvm·数据库·python
m0_470857644 分钟前
实现一个可精确定位、支持左右移动与删除的文本光标系统
jvm·数据库·python
m0_591364736 分钟前
mysql如何通过索引减少行锁范围_mysql索引与加锁逻辑
jvm·数据库·python
weixin_4440129317 分钟前
CSS如何实现单选按钮自定义样式_利用伪元素隐藏默认UI
jvm·数据库·python
X566118 分钟前
CSS如何利用Grid重写老旧的表格布局
jvm·数据库·python
ㄟ留恋さ寂寞22 分钟前
mysql如何配置MySQL的连接保持_调整tcp_keepalive设置
jvm·数据库·python
2301_7838486523 分钟前
Less如何构建CSS样式库_通过继承机制优化组件化开发
jvm·数据库·python
2301_769340679 小时前
如何在 Vuetify 中可靠捕获 Chip 关闭事件(包括键盘触发).txt
jvm·数据库·python
woniu_buhui_fei10 小时前
JVM编译器
jvm