From 55c7661b0301e12596a36f14d54b674007dafa2f Mon Sep 17 00:00:00 2001 From: SnailClimb Date: Sun, 19 May 2019 11:04:24 +0800 Subject: [PATCH] =?UTF-8?q?Update=20=E7=B1=BB=E5=8A=A0=E8=BD=BD=E5=99=A8.m?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/jvm/类加载器.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/java/jvm/类加载器.md b/docs/java/jvm/类加载器.md index a2828e1a..b64488a3 100644 --- a/docs/java/jvm/类加载器.md +++ b/docs/java/jvm/类加载器.md @@ -2,6 +2,8 @@ 类加载过程:**加载->连接->初始化**。连接过程又可分为三步:**验证->准备->解析**。 +![类加载过程](http://pqrlmrv7w.bkt.clouddn.com/img/2019-4/类加载过程.png) + 一个非数组类的加载阶段(加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,这一步我们可以去完成还可以自定义类加载器去控制字节流的获取方式(重写一个类加载器的 `loadClass()` 方法)。数组类型不通过类加载器创建,它由 Java 虚拟机直接创建。 所有的类都由类加载器加载,加载的作用就是将 .class文件加载到内存。 @@ -96,7 +98,7 @@ protected Class loadClass(String name, boolean resolve) 双亲委派模型保证了Java程序的稳定运行,可以避免类的重复加载(JVM 区分不同类的方式不仅仅根据类名,相同的类文件被不同的类加载器加载产生的是两个不同的类),也保证了 Java 的核心 API 不被篡改。如果不用没有使用双亲委派模型,而是每个类加载器加载自己的话就会出现一些问题,比如我们编写一个称为 `java.lang.Object` 类的话,那么程序运行的时候,系统就会出现多个不同的 `Object` 类。 -### 如果我们不想要双亲委派模型怎么办? +### 如果我们不想用双亲委派模型怎么办? 为了避免双亲委托机制,我们可以自己定义一个类加载器,然后重载 `loadClass()` 即可。 @@ -104,7 +106,7 @@ protected Class loadClass(String name, boolean resolve) 除了 `BootstrapClassLoader` 其他类加载器均由 Java 实现且全部继承自`java.lang.ClassLoader`。如果我们要自定义自己的类加载器,很明显需要继承 `ClassLoader`。 -## 推荐 +## 推荐阅读 - -