File tree 1 file changed +2
-2
lines changed
1 file changed +2
-2
lines changed Original file line number Diff line number Diff line change 7
7
8
8
## 类的生命周期
9
9
10
- 类从被加载到虚拟机内存中开始到卸载出内存为止,它的整个生命周期可以简单概括为 7 个阶段::加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)。其中,前三个阶段可以统称为连接 (Linking)。
10
+ 类从被加载到虚拟机内存中开始到卸载出内存为止,它的整个生命周期可以简单概括为 7 个阶段::加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)。其中,验证、准备和解析这三个阶段可以统称为连接 (Linking)。
11
11
12
12
这 7 个阶段的顺序如下图所示:
13
13
107
107
108
108
对于` <clinit> () ` 方法的调用,虚拟机会自己确保其在多线程环境中的安全性。因为 ` <clinit> () ` 方法是带锁线程安全,所以在多线程环境下进行类初始化的话可能会引起多个线程阻塞,并且这种阻塞很难被发现。
109
109
110
- 对于初始化阶段,虚拟机严格规范了有且只有 5 种情况下,必须对类进行初始化(只有主动去使用类才会初始化类):
110
+ 对于初始化阶段,虚拟机严格规范了有且只有 6 种情况下,必须对类进行初始化(只有主动去使用类才会初始化类):
111
111
112
112
1 . 当遇到 ` new ` 、 ` getstatic ` 、` putstatic ` 或 ` invokestatic ` 这 4 条字节码指令时,比如 ` new ` 一个类,读取一个静态字段(未被 final 修饰)、或调用一个类的静态方法时。
113
113
- 当 jvm 执行 ` new ` 指令时会初始化类。即当程序创建一个类的实例对象。
You can’t perform that action at this time.
0 commit comments