Skip to content

Commit 13bc228

Browse files
committed
class load
1 parent 7f98792 commit 13bc228

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

README-Jvm.md

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -214,26 +214,29 @@ Parallel Old 始于JDK1.6,作用于老年代,采用标记整理算法;
214214
### 类加载过程 ###
215215
jvm中class类的加载过程,大致分为这几个步骤
216216

217-
- 加载(load)
218-
- 根据全类名,加载类的二进制字节流
219-
- 将字节流转存方法区
220-
- 生成Class对象作为访问入口
221217

222-
- 验证(verify)
223-
- class文件的格式验证,验证是否符合JVM规范
224-
- class中的元数据验证,验证是否符合Java规范
225-
- class的字节码验证,验证数据流控制流不会危害JVM环境
226218

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)
228231
- 给变量分配内存
229232
- 初始化零值(比如int默认为0,boolean默认为false)
230233
- final变量直接赋值
231234

232-
- 解析
235+
解析
233236
- 符号引用变为直接引用
234237
- 类、字段、方法、接口方法解析
235238

236-
- 初始化
239+
初始化
237240
- 初始化变量
238241
- 构造函数
239242
- static块

0 commit comments

Comments
 (0)