Java类加载机制

类加载过程

1、加载

2、验证

3、准备

4、解析

5、初始化

双亲委派模型

从Java虚拟机的角度来讲,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用c++语言实现,是虚拟机自身的一部分;另一种就是所有其他的类加载器,这些类加载器都由Java语言实现,独立于虚拟机外部,并且全部都继承自抽象类java.lang.ClassLoader

Java类加载机制_第1张图片
双亲委派模型

1、启动类加载器(Bootstrap ClassLoader):这个类加载器负责加载\lib目录中的。

2、扩展类加载器(Extension ClassLoader):这个类加载器负责加载\lib\ext目录中的。

3、应用程序类加载器(Application ClassLoader):这个类加载器负责加载用户类路径上所指定的类库。

双亲委派模型的工作过程:

如果一个类加载器收到类加载请求,首先它不会自己尝试去加载这个类,而是把加载请求委派给父类加载器去完成,每一个层次的类加载器都是如此,无论哪一个类加载器请求加载最终都会委派给最顶层的启动类加载器进行加载。只有当父类加载器反馈自己无法完成加载时,子类才会尝试自己去加载。

这样有一个显而易见的好处就是Java类随着它的类加载器一起具备了一种有优先级的层次关系。例如java.lang.Object,它存放在rt.jar中,无论哪个类加载器进行加载最终都会委派给顶层启动类加载器进行加载,因此Object类在程序的各种类加载器中都是同一个类。


你可能感兴趣的:(Java类加载机制)