java-jvm-类生命加载周期

Java中JVM(Java虚拟机)类的生命周期指的是一个类从被加载到JVM中开始,直到从JVM中卸载的整个过程。这个生命周期大致可以分为以下几个阶段:

1. 加载(Loading)

加载是类生命周期的开始,这个过程涉及以下几个步骤:

  • **通过全限定名定位类**:JVM需要知道类的全限定名(包括包名和类名)来定位.class文件。

  • **读取.class文件**:类加载器读取.class文件的二进制数据到JVM内部。

2. 验证(Verification)

验证确保加载的类信息符合JVM规范,没有安全问题。这个过程包括:

  • **文件格式验证**:检查字节码文件格式是否正确。

  • **元数据验证**:检查类的结构信息,如字段、方法定义等。

  • **字节码验证**:确保字节码的指令不会违反JVM规范。

3. 准备(Preparation)

准备阶段为类分配内存,并设置初始值。具体包括:

  • **分配内存**:为类的静态变量分配内存空间。

  • **设置初始值**:为静态变量设置默认初始值,如int类型变量初始化为0。

4. 解析(Resolution)

解析是将类中的符号引用转换为直接引用的过程。这包括:

  • **类或接口的解析**:将类名、接口名的符号引用转换为直接引用。

  • **字段解析**:将字段名和类型转换为直接引用。

  • **方法解析**:将方法名、参数列表和返回类型的符号引用转换为直接引用。

5. 初始化(Initialization)

初始化是为类的静态变量赋予程序中指定的初始值,并执行静态初始化器的过程。这个阶段包括:

  • **执行静态变量的赋值语句**:为静态变量设置指定的初始值。

  • **执行静态初始化器**:`static{}`块中的代码被执行。

6. 使用(Usage)

类被加载、验证、准备、解析和初始化后,就可以被应用程序使用了。在这个阶段,类的实例可以被创建,类的方法可以被调用。

7. 卸载(Unloading)

卸载是类生命周期的结束。当一个类没有被任何地方引用时,JVM的垃圾回收器可能会在某个时间点卸载这个类。卸载包括:

  • **回收静态变量占用的内存**:类的静态变量将被清除。

  • **释放类在方法区占用的内存**:类的信息将从JVM中移除。

特点和注意事项

  • **线程安全**:类在初始化阶段可能会执行静态初始化器,这可能涉及到多线程问题。JVM确保类的初始化是线程安全的。

  • **主动使用**:除了被动的类加载外,类也可以通过反射等方式被主动使用。

  • **类的唯一性**:对于同一个类加载器,一个类的全限定名只对应一个`Class`对象。

  • **延迟加载**:JVM对类采用延迟加载的策略,即只有在类被真正使用时才进行加载。

总结

JVM类的生命周期是一个完整的过程,从类被加载到JVM中,经历验证、准备、解析和初始化,然后被应用程序使用,直到最终被卸载。理解类的生命周期对于开发者来说非常重要,它有助于正确地使用类,避免潜在的内存泄漏和其他问题。

相关推荐
DieSnowK6 分钟前
[项目][WebServer][Makefile & Shell]详细讲解
开发语言·c++·http·makefile·shell·项目·webserver
Freak嵌入式7 分钟前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
java·开发语言·数据结构·python·接口·抽象基类
冷凝女子9 分钟前
【QT】基于HTTP协议的网络应用程序
开发语言·qt·http
知识分享小能手12 分钟前
mysql学习教程,从入门到精通,SQL 删除数据(DELETE 语句)(19)
大数据·开发语言·数据库·sql·学习·mysql·数据开发
前端小马17 分钟前
解决IDEA出现:java: 程序包javax.servlet不存在的问题
java·servlet·intellij-idea
鸽芷咕21 分钟前
【Python报错已解决】libpng warning: iccp: known incorrect sRGB profile
开发语言·python·机器学习·bug
白总Server27 分钟前
MongoDB解说
开发语言·数据库·后端·mongodb·golang·rust·php
XyLin.30 分钟前
Msf之Python分离免杀
开发语言·python·网络安全·系统安全
声学黑洞仿真工作室32 分钟前
Matlab Delany-Bazley和Miki模型预测多孔材料吸声性能
开发语言·人工智能·算法·matlab·微信公众平台
计算机学姐39 分钟前
基于python+django+vue的家居全屋定制系统
开发语言·vue.js·后端·python·django·numpy·web3.py