java类加载机制

看了一些资料,讲到java类加载机制的问题。虽然曾经也有所了解,但总是容易遗忘,在此记录一下。

ClassLoader层次结构

在极客时间《java核心技术36讲》中看到一张图,比较清晰:
java类加载机制

左侧为相应的类加载器,右侧为其负责加载的类。(此图仅限于jdk1.8及更早版本,JDK1.9之后的加载机制发生了较大变化。

双亲委派模型

双亲委派是指类加载器要加载某个类的时候,会优先让父类取加载,如果父类可以加载的话。这样做的目的主要是想避免重复加载,因为子加载器可以访问父加载器中的类,反过来是不行的。

双重分派

分派主要发生在方法调用的过程中,因java的多态产生,与java类加载机制没有关联。因为自己曾经把它和双亲委派的概念弄混了,在此特殊说明下。
该概念具体可参考:访问者模式