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

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

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

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

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

基本机制就是:

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

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

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

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

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

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

再去查谷歌,发现如下:

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

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

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763,QQ2群:454796847,QQ3群:187424846。QQ群进群密码:xttblog,想加微信群的朋友,可以微信搜索:xmtxtt,备注:“xttblog”,添加助理微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

©著作权归作者所有:来自51CTO博客作者mob604756f06ed8的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Spark 如何摆脱java双亲委托机制优先从用户jar加载类?
  2. 话说 类加载过程 第一篇
  3. Java ClassLoader基础及加载不同依赖 Jar 中的公共类
  4. Android类加载之PathClassLoader和DexClassLoader
  5. ClassLoader(java 与 android 对比)
  6. Android 热修复核心原理,ClassLoader类加载
  7. Android中的ClassLoader与热修复
  8. Android插件化框架系列之类加载器
  9. [置顶] Android类加载之PathClassLoader和DexClassLoader

随机推荐

  1. android installd分析
  2. Android Jetpack之Lifecycle的源码分析
  3. Android(安卓)四个步骤集成EventBus事件
  4. 2011.09.01(5)——— android checkbox自定
  5. startActivity exposed beyond app throu
  6. Build Android Platform
  7. Android动画之translate(位移动画)
  8. Android中真正的Player
  9. Android(安卓)Studio编译使用了Maven的工
  10. 【学习Android遇到的错误】Unable to res