Java的双亲委派模式怎么实现


今天小编给大家分享一下Java的双亲委派模式怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。说起双亲委派模型,不得不说一下类加载器。当我们编译Java类时,JVM会创建与平台和机器无关的字节码。字节码存储在.class文件中。当我们尝试使用一个类时,类加载器就会把它加载到内存中,然后把字节码文件转成Class对象。通俗的说类加载器就是将.class文件转成Class对象的。启动类加载器(Bootstrap Class Loader):负责加载存放在 lib目录下的类,或者被-Xbootclasspath参数所指定的路径中存放的类。比如:rt.jarjava.lang.*包下的类。扩展类加载器(Extension Class Loader):负责加载libext目录中,或者被java.ext.dirs系统变量所指定的路径中所有的类库。应用程序类加载器(Application Class Loader):负责加载用户类路径上所有的类库。当类加载器收到加载类的请求时,它首先会把请求委派给父加载器去完成,每一层都如此,直到把请求委派给最顶层的启动类加载器,只有当父加载器无法加载委派过来的类时,子加载器才会加载。JVM在加载⼀个类时,会调⽤AppClassLoader的loadClass⽅法来加载这个类,不过在这个⽅法中,会先使⽤ExtClassLoader的loadClass⽅法来加载类,同样ExtClassLoader的loadClass⽅法中会先使⽤BootstrapClassLoader来加载类,如果BootstrapClassLoader加载到了就直接成功,如果 BootstrapClassLoader没有加载到,那么ExtClassLoader就会⾃⼰尝试加载该类,如果没有加载到,那么则会由AppClassLoader来加载这个类。所以,双亲委派指得是,JVM在加载类时,会委派给ExtClassLoader和BootstrapClassLoader进⾏加载,如果没加载到才由⾃⼰进⾏加载。这里说的双亲并不是说类加载器之间是以继承方式实现的,而是以组合的方式实现的,通过源码可以证实这点:java.lang.ClassLoader#loadClass同时,通过源码我们也可以看到类加载器的加载流程是跟我们描述的一样的:先检查请求加载的类型是否已经被加载过,若没有则调用父加载器的loadClass()方法,若父加载器为空则默认使用启动类加载器作为父加载器。假如父类加载器加载失败,抛出ClassNotFoundException异常的话,才调用自己的findClass()方法尝试进行加载。保证唯一性,避免重复加载:类的加载随着它的类加载器一起免费云主机域名具备了层级关系,通过这种层级关系避免了重复加载,父类加载器加载了该类,子加载器就无需加载了。避免核心类被篡改:核心类由启动类加载器加载,即使用户自定义同名核心类也不会被加载。以上就是“Java的双亲委派模式怎么实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。

相关推荐: Mysql数据库的导入导出方式有哪些

本文小编为大家详细介绍“Mysql数据库的导入导出方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql数据库的导入导出方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。本机(物理机)数据库全部导出(左下角打开d…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 07/06 12:25
Next 07/06 12:25

相关推荐