双亲委派模型:启动加载器、扩展加载器、应用程序加载器

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

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

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

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

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

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

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

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

好处:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值