收藏不看系列——类加载的双亲委派模型

上一期收藏不看系列文章中提到一个比较重要的点就是类加载需要经历一个特殊的过程,那么这期就跟大家分享类加载过程中重要的知识点,类加载的规范。

类加载之双亲委派模型

学习Java的小伙伴们,类加载这个概念肯定不陌生,那么对于加载需要经历那些过程呢?下面给大家简单分享一下。

类加载器

类和类加载器

在Java里面一切皆为对象,包括class也都是Class的对象,那么对于类来说类加载器是一个唯一的入口,让类加载到JVM中为程序使用。说是唯一入口,JVM中会有很多类加载器,他们有着各自职责使JVM中的类更规范有序。

  • 启动类加载器(Bootstrap ClassLoader)——启动类加载器C++实现,虚拟机的重要组成部分,加载JVM必须的基础资源,JAVA_HOME/lib下或者-Xbootclasspath指定目录中的虚拟机基础类库
  • 扩展类加载器(Extension ClassLoader)——sun.misc.Launcher$ExtClassLoader实现的,负责加载JAVA_HOME/lib/ext目录中或者java.ext.dirs指定目录中的所有类库
  • 应用程序类加载器(Application ClassLoader)——sun.misc.Launcher$AppClassLoader实现的,可以通过ClassLoader.getSystemClassLoader()获得,所以也叫系统类加载器,负责加载所有用户classpath中的类库

双亲委派模型

下面就要提到这一期的重点了,双亲委派模型。


这个模型不是强制性的约束,就是说设计者推荐给开发者的类加载实现方式。

工作流程

一个类加载器收到类加载的请求,这个加载器会把这个请求委派给父类加载器,每一层类加载器都重复这个流程,直到没有父类加载器,当父类加载器没有成功加载类加载请求(没有搜索到所需要的类),那么就子类加载器才尝试加载,重复这个流程,直到接收到请求的那个类加载器,如果还是没有成功加载,那么会抛出ClassNotFound异常。

优势

  • 层次结构清晰
  • 有优先级的概念
  • 保证JVM基础类安全,不会轻易被覆盖掉

总结

类加载的设计方便了我们在程序设计的时候,不用考虑类覆盖的问题,那么对于开发者是非常友好的。而且我们通过类加载器实现一些比较灵活的功能,比如:热加载等。

你可能感兴趣的:(收藏不看系列——类加载的双亲委派模型)