类的生命周期包括如下7个阶段:
所谓加载,简而言之就是将Java类的字节码文件加载到机器内存中,并在内存中构建出Java类的原型--类模板对象。
类模板对象--其实就是在Java类在JVM内存中的一个快照,JVM将从字节码文件中解析出的常量池,类字段,类方法等信息存储到类模板中,这样JVM在运行期便能通过类模板而获取Java类中的任意信息,能够对Java类的成员变量进行遍历,也能进行Java方法的调用
加载完成的操作
加载阶段,简而言之,查找并加载类的二进制数据,生成Class的实例。
当类加载到系统后,就开始链接操作,验证是链接操作的一部分
大体上Java虚拟机需要做以下检查:
简而言之,就是为类的静态变量分配内存,并将其初始化为默认值
简而言之,将类,接口,字段和方法的符号引用转为直接引用
在HotSpot VM中,加载,验证,准备和初始化会按照顺序有条不紊的执行,但链接阶段中的解析操作往往会伴随着JVM在执行完初始化之后再执行
> 简而言之,就是为类的静态变量赋予正确的初始值
> 执行类构造器<clinit>()方法的过程
> 当初始化一个类的时候,如果发现其父类还没进行初始化,则需要先触发器父类的初始化
> 虚拟机会保证一个类的<clinit>()方法在多线程环境中被正确加锁和同步。
使用 static + final 修饰,且显式赋值中不涉及到方法或构造器调用的基本数据类型或String类型的显式赋值,是在准备阶段进行赋值
原文:https://www.cnblogs.com/LongDa666/p/14457133.html