Java 类加载机制

1,类加载机制

类被加载的整个过程(生命周期)

加载->验证->准备->解析->初始化->使用->卸载

类加载器

启动类加载器(Bootstrap ClassLoader)

                    Java 类加载机制

拓展类加载器(Extension ClassLoader)

                    Java 类加载机制

应用程序类加载器(Application ClassLoader)

                    Java 类加载机制

自定义类加载器(customized ClassLoader)

2,什么是双亲委派?

作用:保证一个类可以被想对应的类加载器所加载。因为java中不同的加载器加载同一个类会产生两个类,不能保证唯一性。

对于任意一个类,都需要由它的类加载器和这个类本身一同确定其在就Java虚拟机中的唯一性

上面这种层次关系称为类加载器的双亲委派模型。我们把每一层上面的类加载器叫做当前层类加载器的父加载器,当然,它们之间的父子关系并不是通过继承关系来实现的,而是使用组合关系来复用父加载器中的代码。

    双亲委派模型的工作流程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只有当父加载器在它的搜索范围中没有找到所需的类时,即无法完成该加载,子加载器才会尝试自己去加载该类。

    使用双亲委派模型来组织类加载器之间的关系,有一个很明显的好处,就是Java类随着它的类加载器(说白了,就是它所在的目录)一起具备了一种带有优先级的层次关系,这对于保证Java程序的稳定运作很重要。例如,类java.lang.Object类存放在JDK\jre\lib下的rt.jar之中,因此无论是哪个类加载器要加载此类,最终都会委派给启动类加载器进行加载,这边保证了Object类在程序中的各种类加载器中都是同一个类。
 

3,破坏双亲委派模型

不破坏重写findClass()

破坏重新 loadClass()

上一篇:Java类加载器 — classloader 的原理及应用


下一篇:mybatis-plus 错误java.lang.NoClassDefFoundError: org/apache/velocity/context/Context