Java双亲委派机制

提到双亲委派模型,首先,要知道什么是类加载器。

类加载器就是根据指定全限定名称将class文件加载到JVM内存,转为Class对象。

Java中的类加载器主要用于实现类的加载。Java中的类和类加载器一起唯一确定类在JVM中的唯一性。

类加载器可以分为二大类,启动类加载器其他类加载器,其中启动类加载器(Bootstrap ClassLoader):用C++实现,是JVM的一部分,而其他类加载器:由Java语言实现,继承自抽象类ClassLoader,其他类加载器又分为扩展类加载器应用程序加载器

启动类加载器(Bootstrap ClassLoader):用C++实现,是JVM的一部分,其他加载器都是用Java实现,是独立于JVM中。主要负责加载<java home>下的lib目录下的类库或者被-Xbootclasspath参数指定的路径中的类库,应用程序不能直接使用该加载器

扩展类加载器:负责加载Java home下的lib/ext 下的类或者类系统变量java.ext.dirs指定的路径下的类库,开发者可以直接使用该加载器。

应用程序类加载器:主要负责加载用户指定的路径即classPath下的类库。如果应用程序没有自定义类加载器,默认使用该加载器。(loadClass、findClass、defineClass)

双亲委派模型要求除了顶层的启动类加载器以外,其他的类加载器都有自己的父类加载器,使用组合关系来复用父类加载器,将请求委派给父类加载器,每一层都是如此。因此所有的加载最终都会到达顶层的启动类加载器。只有当父类加载器反馈不能加载(ClassNotFoundException),才会将加载的任务交给子类加载器。

好处:

1.使得Java类伴随着它的类加载器一起有了优先级。以object类为例,任何加载object的请求都会到达启动类加载器,使得object在各种类加载器中都是同一个类。如果不是这个模型,用户自定义了object类,系统会出现多个object类,导致混乱。

2.双亲委派模型可以保证Java程序运行的稳定性,但是实现却非常简单。

发布了84 篇原创文章 · 获赞 65 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_42451835/article/details/104237825