双亲委托机制

本文最后更新于:2020年12月4日 凌晨

双亲委托机制

​ 双亲委托机制又叫父委托机制,描述为在当前类加载器加载某一个类时,会先调用父类加载器加载此类,如果付类加载器还有父类,就迭代委托,如果父类已经加载过此类,返回即可;如果没有,就尝试加载此类,加载失败,就交给子类加载器加载,依次向下。逻辑图如下图。

双亲委托机制的用处

双亲委托机制是JVM实现的一种类加载方式,这样做的好处其一是可以保证所有的类只被加载一次,不会出现同一类被记载多次,造成资源浪费和程序中引用的混乱。其二是可以保证JVM核心类不会被改写,假如用户尝试加载自建String类,在委托的过程中,JVM自带的启动类加载器、扩展类加载器、应用类加载器已经加载过String类,所以会直接抛出此类,不会再让别的加载器加载这个类。

双亲委托机制的缺点

虽然双亲委托机制有这样的优点但是在实际的开发中,还是需要绕过此机制,例如在实现热部署中,需要卸载部署模块的所有类,类对象虽然会被GC,但是最直接的办法就是卸载这些类的类加载器,但是系统的类加载器是不可能被卸载的,所以需要自己实现类加载器,为了保证模块中的类是由自建类加载器加载的,就需要绕过系统应用类加载器对模块类的加载。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!