JVM双亲委派

JVM双亲委派机制:
类加载:类加载时线程互斥,所以可以通过内部类进行创建
类加载原理:
向上加载向下委派
当类进行加载时,会寻找他的父类(递归),寻找到最高的父类时向下委派加载,直到不可向下委派为止。
约基础的类由约上层的加载器进行加载,但是如果基础类有调用回用户类->线程上下文类加载器
1、防止类重复加载无意义消耗资源。
2、防止核心类被用户类篡改加载。
双亲委派机制三次破坏:
第一次:
版本问题,双亲委派机制在JDK1.2引入。但类加载器和抽象类CLassLoader在JDK1.0就已经存在,面对已存在的用户自定义类加载器需要进行妥协。
第二次:
SPI机制:服务发现机制,当服务者提供了服务接口的一种实现后,在jar包的META-INF/services/目录里同时创建一个服务接口命名的文件。当JDK装配该模块时可以通过META-INF/services/的配置文件找到该类实现装载实例化。
线程上下文类加载器:当父类需要使用其他用户提供的jar包类时,需要在线程创建时委托线程设置上下文类加载器对其他接口实现的加载
当调用线程上下文类加载器时,会破坏双亲委派的,向上委派向下加载机制
第三次:
动态部署,例如代码热替换、模块热部署。每次热部署时会将当前部署类的类加载器一并替换
热部署类加载
->基础类java.*开头的类,给父类加载器
->委派列表名单的类,给父类加载器
->import引用列表的类,给Export(引用)类的Bundle(包)的类加载器
->查找当前Bundle(包)的Classpath(地址),使用自己类的类加载器
->查找是否存在本类的Fragment Bundle(通信)中,如果有就委派给Fragment Bundle(通信)的类加载器
->查找Dynamic Import(动态导入)列表的Bundle(包),给对应的Bundle的类加载器
->类查找失败
第四次:
JDK9的JDK基于模块化构建,由于model(模块化)构建单一职责的原因,所以会使用自己的类加载器进行加载
缺陷:
在高并发的情况下,如果两个包互相引用,A引用B,B依赖A的B包,会死锁
JDK7在ClassLoader(Class装载器)增加了registerAsParallelCapable方法,将所有级别从ClassLoader(Class装载器)降低了加载的级别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值