zoukankan      html  css  js  c++  java
  • “双亲委派”一词的由来

    摘自:https://www.xttblog.com/?p=3051

    公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
    本博客日IP超过1800,PV 2600 左右,急需赞助商。
    极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
    所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
    视频教程免费领

    我们都知道 java 虚拟机中有一个用来描述类加载机制的词叫“双亲委派”,但是这个词是由何而来,为什么叫双亲委派呢?双亲委派代表有什么意义呢?带着这样的疑问,我问过很多面试的都不是很清楚,而且公司中很多工作了很多年的老司机也讲不清楚。于是我查了很多资料,都没有明确的说明为什么叫双亲委派,但是大多都暗示是翻译问题。但是本文作者却认为它另有深意,具体请看本文给你一一道来。

    类似的说翻译问题,还有 socket,中文意思叫”套接字“,实际英文中代表的是插座的意思。其他的还有很多,我就不在列举了。

    现在我问你“双亲委派机制”(parent delegation)一词中双亲是哪两个?java 中明明是单继承吗,明明是“单亲委派”,或者叫(父类)委派模型也好哈。

    双亲委派模型

    你能够从上图中看出双亲是怎么来的吗?很明显翻译成双亲委派不合适,还不如叫“单亲委派”,或者“父类委派模型”。

    下面我们再看看 Java 类加载的委派模型图:

    java 类加载机制

    基本机制就是:

    如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只有当父加载器在它的搜索范围中没有找到所需的类时,即无法完成该加载,子加载器才会尝试自己去加载该类。

    通过上面的这段话和 Java 类加载的委派模型图,根本无法想象为什么叫双亲 ,明明都只有一个parent,要叫也叫单亲啊。

    只有上面这一个解释是比较合理的。剩下的,我们去查找 IBM 的知识中心:

    The parent-delegation model

    发现IBM的知识中心叫这种机制叫:parent-delegation model。

    这个显然无法翻译成“双亲”啊,即使翻译也应该是 “父委托模型” 或 “父委派模型”。

    而不应该叫 双亲 ,抛开“双”, “亲”字也无法直接体现parent的意思啊,况且“父”在编程界也算是一个常用的词了,什么“父节点”之类的。

    再去查谷歌,发现如下:

    双亲委派模型

    都是 Parent Delegation Model 啊。这个真的无法叫双亲啊,make no sense啊。还不如叫“啃老模型”,如果要正式一点,那建议是:“父委托模型”或“父委派模型”。

    “双亲委派”这个词估计也就是翻译错误的问题,或者是这样一种可能性。相对于 AppClassLoader,即应用程序类加载器。它加载我们项目(工程)下的 CLASSPATH 路径下的类,它会委托 ExtClassLoader 标准扩展(Extension)类加载器(也有称作扩展类加载器),这时 ExtClassLoader 会再次委派 BootstrapClassLoader 启动类加载器。BootstrapClassLoader 是 Java 虚拟机的第一个类加载器,它不能再向上委托了。因此,根据这个过程,我们发现一共委托了两次,所以“双亲委派”中有一个双。而“亲”字,在中国代表的是亲人的意思,而委托两次,都是交给父类来处理,因此都算得上叫亲人。所以“双亲委派”中的双亲应该就是这样来的。如果你还有不同的观点,记得留言讨论哦!

    业余草公众号

    最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号1:xmtxtt(5000人已满),微信号2:codedq(5000人已满),微信号3:xttblog(超2800)。备注:“xttblog”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

    本文原文出处:业余草: » “双亲委派”一词的由来

  • 相关阅读:
    结巴分词 0.14 版发布,Python 中文分词库
    Lazarus 1.0.2 发布,Pascal 集成开发环境
    Android全屏 去除标题栏和状态栏
    服务器日志现 Android 4.2 传将添多项新特性
    Percona XtraBackup 2.0.3 发布
    长平狐 Android 强制设置横屏或竖屏 设置全屏
    NetBeans 7.3 Beta 发布,全新的 HTML5 支持
    CppDepend现在已经支持Linux
    GromJS 1.7.18 发布,服务器端的 JavaScript
    Apache OpenWebBeans 1.1.6 发布
  • 原文地址:https://www.cnblogs.com/xichji/p/11846577.html
Copyright © 2011-2022 走看看