Java类加载机制

类加载过程

1、加载

2、验证

3、准备

4、解析

5、初始化

双亲委派模型

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

双亲委派模型

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

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

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

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

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

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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容