类加载过程java
一、加载c++
二、验证学习
三、准备继承
四、解析虚拟机
五、初始化io
双亲委派模型扩展
从Java虚拟机的角度来说,只存在两种不一样的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用c++语言实现,是虚拟机自身的一部分;另外一种就是全部其余的类加载器,这些类加载器都由Java语言实现,独立于虚拟机外部,而且所有都继承自抽象类java.lang.ClassLoader请求
双亲委派模型
一、启动类加载器(Bootstrap ClassLoader):这个类加载器负责加载<JAVA_HOME>lib目录中的。程序
二、扩展类加载器(Extension ClassLoader):这个类加载器负责加载<JAVA_HOME>libext目录中的。语言
三、应用程序类加载器(Application ClassLoader):这个类加载器负责加载用户类路径上所指定的类库。
双亲委派模型的工做过程:
若是一个类加载器收到类加载请求,首先它不会本身尝试去加载这个类,而是把加载请求委派给父类加载器去完成,每个层次的类加载器都是如此,不管哪个类加载器请求加载最终都会委派给最顶层的启动类加载器进行加载。只有当父类加载器反馈本身没法完成加载时,子类才会尝试本身去加载。
这样有一个显而易见的好处就是Java类随着它的类加载器一块儿具有了一种有优先级的层次关系。例如java.lang.Object,它存放在rt.jar中,不管哪一个类加载器进行加载最终都会委派给顶层启动类加载器进行加载,所以Object类在程序的各类类加载器中都是同一个类。
欢迎加入学习交流群569772982,你们一块儿学习交流。