目录
类的生命周期
加载阶段
连接阶段
初始化阶段
类的使用阶段
类的加载阶段
类的生命周期
加载阶段
在加载阶段,类加载器首先会通过一个类的全限定名来获取定义此类的二进制字节流。这个步骤主要是将整个Class 文件解析成二进制流。
(全限定名是指一个 java 类的完全限定名,例如,对于类 java.lang.String , 其限定名就是
java.lang.String , 全限定名 是在整个 JVM 中绝对名称,可以表示 Class 文件结构的类或接口
的名称)
然后,将这个字节流所代表的静态存储结构转化为方法区的运行时数据区,即将字节流的数据存入运行时数据区。
最后,在java堆中生成一个代表这个类的 java.lang.Class 对象,作为方法区中这些数据的访问接口。
连接阶段
类的连接阶段是类加载过程的第二个阶段,包括 验证,准备,和解析三个阶段。
1. 验证阶段
验证阶段用于检验被加载的类是否正确的内部结构,并和其他类协调一致。
2. 准备阶段
类准备阶段负责类的静态属性分配内存,并设置默认初始值。
3.解析阶段
将类的二进制数据中的符号引用替换成直接引用
初始化阶段
类的初始化阶段是类的加载过程的最后一个阶段,在这个阶段,JVM 会执行类初始化方法()。该方法由java编译器生成,并由 JVM 调用,程序开发者无法定义同名方法,也无法直接在java程序中调用该方法。该方法包含类静态成员的赋值语句以及 static 语句块合并产生。
类的使用阶段
在类的使用阶段,对象被创建并被赋予特定的初始状态和行为。具体来说,使用阶段的开始标志是JVM 执行到 new 关键字或者使用双冒号(::)进行类的反射调用。在对象的初始化过程中,如果有多个初始化块,那么这些初始化块会按照在源代码中出现的顺序执行。在类的使用阶段,对象可以调用其方法,并使用其属性。
类的卸载阶段
当一个类不再被使用时,他会被卸载,释放其所占用的空间。