按照java虚拟机规范,从class文件到加载进入内存中的类,再到类卸载出内存为止,整个生命周期分为七个阶段
分别为:
加载、验证、准备、解析、初始化、使用、卸载
加载:
平时我们写的java文件,会生成.class文件,那么当使用这个类的时候,jvm就会去读取这个文件
验证:
就是jvm根据java规范,来校验你加载进来的class文件中的内容是否符合规范
准备:
给类的静态变量分配内存,并赋予默认值。这里的默认值是指例如int类型默认值是0,而不是具体值
解析:
将符号引用变为直接引用;比如一个A类和B类,A类引用B类,在进入内存之前,A和B的引用关系是靠符号来进行关联的,进入内存后就会有地址,就靠地址进行相互的直接引用,就好像有两个人,在别的地方,他们的距离是用一种相对的方式记录距离,到了地球上以后,就可以用经纬度来记录二者的距离。
初始化:
对静态变量进行初始化赋值,执行静态代码块
举个例子:
public class A {
private static String i=System.getProperty("i");
}
准备阶段我们只是给变量i分配了内存空间,并赋值了初始值,但是后边的System.getProperty("i")是不会执行的。这部分代码就是在初始化阶段执行的,另外静态代码块也会在这一阶段执行。
使用:
使用类
卸载:
使用完后从虚拟机中销毁