对于双亲委派模型的理解(day002)

类加载器

从java虚拟机的角度来说
1、启动类加载器(BootStrap ClassLoader),这个类加载器是用C++语言实现的,也是虚拟机的一部分
2、所有其他的类加载器,这些加载器都是能被Java语言实现,独立于虚拟机外部,继承java.lang.ClassLoader.
从开发者角度
1、启动类加载器:加载<JAVA_HOME>\lib目录下的核心库到内存中(rt.jar)。
这个是本地代码实现的类装入器,引导类加载器涉及到虚拟机本地实现的细节,开发者无法直接获取到启动类加载器的引用(不允许直接通过引用进行操作)。
2、扩展类加载器(Extension ClassLoader):加载<JAVA_HOME>\lib\ext目录下扩展包
将\ext或者由系统变量java.ext.dir指定位置中的类库加载到内存中,可以直接使用。
3、应用程序类加载器(Application ClassLoader):加载用户路径上(Classpath)指定的类库,可以直接使用。

双亲委派机制

这些类加载器之间的层次关系就被称为类加载器的双亲委派模型,该模型要求处理顶层的启动类加载器之外,都需要父类加载器,这种父子关系一般都是通过组合关系实现,而不是继承。
在这里插入图片描述双亲委派机制的过程
1、首先是应用程序类加载器(Application ClassLoader)收到一个类加载请求,他不会自己去加载,而是将这个请求传递给父类加载器(扩展类加载器)。
2、扩展类加载器(Extension ClassLoader)收到应用程序类加载器的类加载请求,他不会自己去加载,而是将这个请求传递给父类加载器(启动类加载器)。
3、启动类加载器收到这个请求,就会去加载,如果加载失败,就会将这个请求传递给扩展类加载器。
4、扩展类加载器如果也是失败的,就会继续传递给应用程序类加载器。
5、如果应用程序类加载器也是失败,就会使用自定义加载器去尝试加载。
6、如果还是失败,就会抛出ClassNotFoundException异常。

双亲委派机制的细节
1、Java虚拟机的第一个类加载器是BootStrap,他是非常特殊的,他不是Java类,不需要被别人加载,他可以去加载其他类,他是Java虚拟机的一部分,在JVM启动的时候BootStrap就已经启动了。
2、委托机制的意义:防止内存中出现多份同样的字节码。
比如说,现在有2个类(A和B),都需要加载system类。不使用委托机制,那么就是自己加载自己,A加载一份system字节码,B加载一份system字节码,这样内存就会出现2中一模一样的syatem字节码。
3、优点
Java类伴随着具有优先级的层次关系,确保了在各种加载环境下的加载顺序,保证运行的安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值