JVM的双亲委派机制

引出问题,那么多类,继承错综复杂,java怎么加载类?

问题引出

先了解下java类加载,因为JVM最终是通过类加载器来完成类的加载的。而java的类加载器是通过双亲委派机制来加载的。类加载器有很多种如图所示。

类加载
类加载器分类

类加载器的指责的是双亲委派机制的基础。启动类加载器中的-Xbootclasspath可以指定JVM虚拟机信任的类库目录。扩展类加载器可以用java.ext.dirs指定加载的类库位置。

启动类加载器
扩展类加载器
应用程序类加载器

还有自定义继承java.lang.ClassLoader根据不同的需求实现自定义的类加载器。

复杂的类依赖关系中,如何保障类加载的安全和顺序?jvm双亲委派分为向上委派和向下委派。

当一个类进来的时候,首先进行向上委派。而且分三步。再进行向下委派。

向上委派

当到达启动类加载器后,启动类加载器无法加载该类,出现这种情况的原因,是这个class类在父类的类加载路径中不存在,出现这种情况,就会委派给子类加载器去加载,直到成功。最后还没加载到,会报classnotfound异常。

向下委派

从下往上加载,先加载java核心类,保证jdk的核心类的加载,有效避免应用程序中某些类不安全导致jvm不安全。从上往下,保证类需要加载的类,都得到了加载。最后还是没找到抛异常,会导致jvm启动失败。

加载过程

总结,双亲委派机制,保障类的唯一性和安全性。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容