Class加载-初始化-Linking-Initializing
类被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期包括7个阶段:
加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Usting)、卸载(Unloading)
Linking
-
Verification
校验装载的class文件是否符合JVM规范
-
Preparation
将class文件的静态变量赋默认值
如:
static int i = 8 ;
这里会给i赋值0,而不是赋值8。
-
Resolution
- 将类、方法、属性等符号引用解析为直接引用
对class文件常量池中各种符号引用进行解析,转成指针,偏移量等内存地址的直接引用
Initializing
-
调用类初始化代码,给静态成员变量赋初始值
-
Load-默认值-初始值
-
new -申请内存-默认值-初始值
DCL懒汉式单例
public class Singleton { private volatile static Singleton instance = null; public static Singleton getInstance() { if(null == instance) { synchronized (Singleton.class) { if(null == instance) { instance = new Singleton(); } } } return instance; } }