File tree Expand file tree Collapse file tree 1 file changed +14
-11
lines changed Expand file tree Collapse file tree 1 file changed +14
-11
lines changed Original file line number Diff line number Diff line change @@ -214,26 +214,29 @@ Parallel Old 始于JDK1.6,作用于老年代,采用标记整理算法;
214
214
### 类加载过程 ###
215
215
jvm中class类的加载过程,大致分为这几个步骤
216
216
217
- - 加载(load)
218
- - 根据全类名,加载类的二进制字节流
219
- - 将字节流转存方法区
220
- - 生成Class对象作为访问入口
221
217
222
- - 验证(verify)
223
- - class文件的格式验证,验证是否符合JVM规范
224
- - class中的元数据验证,验证是否符合Java规范
225
- - class的字节码验证,验证数据流控制流不会危害JVM环境
226
218
227
- - 准备(prepare)
219
+ 加载(load)
220
+ - 根据全类名,加载class文件的二进制字节流;可以从 jar、war、网络、动态生成等方式加载
221
+ - 将字节流转存到方法区,变成运行时数据结构
222
+ - 内存中生成Class对象(比较特殊,在方法区中),并作为访问入口
223
+
224
+ 验证(verify)
225
+ - class的文件格式验证,验证是否符合JVM规范;开头、版本等等
226
+ - class的元数据验证,验证是否符合Java语义;父类、接口、抽象类等等
227
+ - class的字节码验证,验证数据流控制流不会危害JVM环境;类型转换、访问安全
228
+ - 符号引用验证(在步骤 解析 中执行),类是否存在等等
229
+
230
+ 准备(prepare)
228
231
- 给变量分配内存
229
232
- 初始化零值(比如int默认为0,boolean默认为false)
230
233
- final变量直接赋值
231
234
232
- - 解析
235
+ 解析
233
236
- 符号引用变为直接引用
234
237
- 类、字段、方法、接口方法解析
235
238
236
- - 初始化
239
+ 初始化
237
240
- 初始化变量
238
241
- 构造函数
239
242
- static块
You can’t perform that action at this time.
0 commit comments