类加载器相关内容

来源:互联网 发布:动漫网络黑名单 编辑:程序博客网 时间:2024/06/06 07:26

  前面叙述的类加载过程中大部分都是虚拟机实现的,可供用户介入的部分很少,除了初始化是由程序员定义外,虚拟机设计团队还把“如何根据名称找到类的字节码文件”这一权限开放给用户,对类加载有特殊需求的用户就可以继承ClassLoader来实现自定义的加载方式。

1. 类相等的判定

   虚拟机环境中判断两个类相等,不仅仅要求两个类的全限定名相同,而且要求两者都是由同一类加载器加载的。

2. 加载器等级和双亲委派模型

   类加载器等级见下图:

  

基本上,如果没有定义自己的类加载器,除了java.ext.dirs目录下的类有扩展类加载器完成,其他的应用程序中的类都由应用程序类加载器完成。

 

双亲委派模型:

   关于这个名称我当初误会了好久,我觉得上级委托可能更清楚些,核心思想就是类加载首先委托上级来完成,依次递归,只有当上级无法加载,才由自己来加载。

  按照上面的逻辑,所有的类最终都会委托到启动类加载器加载,只不过每个级别的类加载器加载的范围(目录)不同,所以最终大部分归结到Application ClassLoader加载器来完成。

  双亲委派模型的对于java程序的稳定运行很重要,例如java.lang.Object卫浴rt.jar包,位于lib目录下,双亲委派模式保证无论哪个类加载器加载,最终都会交由启动类来加载Object,所以各个环境的Object都是同一个类。

原创粉丝点击