当你超过别人一点点,别人会嫉妒你;当你超过别人一大截,别人就会羡慕你

据说给我点关注的都成了大佬,点关注的我都会私发一份好东西​​​​​​​

呕心沥血半年之作,进去不点赞你回来骂我https://blog.csdn.net/codeyanbao/article/details/111569150​​​​​​​

你得先知道

在介绍双亲委派机制的时候,不得不提ClassLoader(类加载器)。说ClassLoader之前,我们得先了解下Java的基本知识。  
  Java是运行在Java的虚拟机(JVM)中的,但是它是如何运行在JVM中了呢?我们在IDE中编写的Java源代码被编译器编译成.class的字节码文件。然后由我们得ClassLoader负责将这些class文件给加载到JVM中去执行。  
  JVM中提供了三层的ClassLoader:

  • Bootstrap classLoader:主要负责加载核心的类库(java.lang.*等),构造ExtClassLoader和APPClassLoader。

  • ExtClassLoader:主要负责加载jre/lib/ext目录下的一些扩展的jar。

  • AppClassLoader:主要负责加载应用程序的主函数类

    那如果有一个我们写的Hello.java编译成的Hello.class文件,它是如何被加载到JVM中的呢?别着急,请继续往下看。

双亲委派机制

我打开了我的AndroidStudio,搜索了下“ClassLoader”,然后打开“java.lang”包下的ClassLoader类。然后将代码翻到loadClass方法:

    public Class<?> loadClass(String name) throws ClassNotFoundException {return loadClass(name, false);}//              -----??-----protected Class<?> loadClass(String name, boolean resolve)throws ClassNotFoundException{// 首先,检查是否已经被类加载器加载过Class<?> c = findLoadedClass(name);if (c == null) {try {// 存在父加载器,递归的交由父加载器if (parent != null) {c = parent.loadClass(name, false);} else {// 直到最上面的Bootstrap类加载器c = findBootstrapClassOrNull(name);}} catch (ClassNotFoundException e) {// ClassNotFoundException thrown if class not found// from the non-null parent class loader}if (c == null) {// If still not found, then invoke findClass in order// to find the class.c = findClass(name);}}return c;}

其实这段代码已经很好的解释了双亲委派机制,为了大家更容易理解,我做了一张图来描述一下上面这段代码的流程:

从上图中我们就更容易理解了,当一个Hello.class这样的文件要被加载时。不考虑我们自定义类加载器,首先会在AppClassLoader中检查是否加载过,如果有那就无需再加载了。如果没有,那么会拿到父加载器,然后调用父加载器的loadClass方法。父类中同理也会先检查自己是否已经加载过,如果没有再往上。注意这个类似递归的过程,直到到达Bootstrap classLoader之前,都是在检查是否加载过,并不会选择自己去加载。直到BootstrapClassLoader,已经没有父加载器了,这时候开始考虑自己是否能加载了,如果自己无法加载,会下沉到子加载器去加载,一直到最底层,如果没有任何加载器能加载,就会抛出ClassNotFoundException。那么有人就有下面这种疑问了?

为什么要设计这种机制

这种设计有个好处是,如果有人想替换系统级别的类:String.java。篡改它的实现,在这种机制下这些系统的类已经被Bootstrap classLoader加载过了(为什么?因为当一个类需要加载的时候,最先去尝试加载的就是BootstrapClassLoader),所以其他类加载器并没有机会再去加载,从一定程度上防止了危险代码的植入。

总结了一张脑图如下:

参加CSDN 1024当天比赛文章,学Java的看完不点赞你再来打我

想成为Java开发专家,了解这些还远远不够,我这里总结了一些Java知识的史上最全脑图:

等等等还有五十几张脑图等着你,不光是脑图,知识点的讲解也会在下面的公众号第一时间发布哦,赶紧来关注吧~

微信搜索:IT烂笔头  或者微信扫描二维码,关注回复【职场】获得作者好友位

通俗易懂的双亲委派机制相关推荐

  1. JVM 双亲委派机制(通俗易懂)

    类加载器 Java是运行在Java的虚拟机(JVM)中的,我们在IDE中编写的Java源代码被编译器编译成.class的字节码文件.然后ClassLoader负责将这些class文件加载到JVM中去执 ...

  2. 阿里预面:谈谈你对双亲委派机制的理解?这个名字有啥问题?如何打破?为啥双亲委派?...

    前情回顾 秋招面试中,我每次面试似乎都被问到关于JVM双亲委派的相关问题. 我先考考你:你是怎么理解双亲委派机制的?这个名字你有没有觉得有问题?能举个简单例子说明一些双亲委派吗?双亲委派有何好处?如何 ...

  3. 简单的Java双亲委派机制

    双亲委派机制 Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象,而且加载某个类的class文件时,Java虚拟机采用的 ...

  4. 【JVM】类加载器:双亲委派机制、沙箱安全机制

    · 双亲委派机制.沙箱安全机制是JVM中类加载器系统的相关术语 · 在这之前,应该先了解JVM类加载器系统的相关概念 一.类加载器基础知识 见下图1,java文件首先会被编译成class文件,clas ...

  5. 【Java 虚拟机原理】Android 类加载机制 ( 双亲委派机制 | BootClassLoader | PathClassLoader | DexClassLoader )

    文章目录 一.Android 类加载机制 二.双亲委派机制 一.Android 类加载机制 Android 中的类加载 使用了 双亲委派 机制 , 如下图所示 : 在 Android 中提供了 333 ...

  6. JVM-白话聊一聊JVM类加载和双亲委派机制源码解析

    文章目录 Java 执行代码的大致流程 类加载loadClass的步骤 类加载器和双亲委派机制 sun.misc.Launcher源码解析 Launcher实例化 Launcher 构造函数 双亲委派 ...

  7. Tomcat - 都说Tomcat违背了双亲委派机制,到底对不对?

    文章目录 类加载的本质 JVM 双亲委派机制 BootstrapClassLoader(启动类加载器) ExtensionClassLoader AppClassLoader Tomcat的 类加载顺 ...

  8. 破坏双亲委派机制的那些事

    前言 今天重读<深入理解Java虚拟>这本书,读到破坏双亲委派机制这一小节,其中有一段话,如下 双亲委派模型的第二次"被破坏"是由这个模型自身的缺陷所导致的,双亲委派很 ...

  9. java安全沙箱(一)之ClassLoader双亲委派机制

    java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...

最新文章

  1. win7如何更改文件类型_教你win7局域网设置方法
  2. HttpClient超时重复提交问题
  3. 进程间程序替换和minishell
  4. 如何利用Excel计算有多少种组合?
  5. oracle 转换成csv文件,如何将csv转换为oracle中的表
  6. 拼题a答案c语言计算整数各位数字之和,这是小白刷的基础题,跪求大佬帮忙!!!题目:读入一个自然数n...
  7. 百度员工离职总结:如何做个好员工?(转)
  8. ajax data传值
  9. 鲁瑜计算机,程序员计算器.pptx
  10. 概率论与数理统计大纲
  11. 激活Window和office工具
  12. C语言 简单的文件下载器
  13. 用python根据最新的汇率,假设你要出国留学要换外币,输入一定数量的人民币,比如1000元人民币, 按照中国银行的现钞卖出价,输出可换到对应的加元和澳元分别是多少。
  14. 谷歌工具栏不再支持火狐浏览器
  15. 计算机网络通信模型之cs模式(一)简单的socket
  16. 网络安全学习笔记——DNS漏洞
  17. 写给一个外汇女交易员的信(连载六)
  18. 【原创】BERT知识融合
  19. SSH 通过跳板机连接远程主机
  20. Text-to-Table: A New Way of Information Extraction

热门文章

  1. 考研二战日记——第133+134天小结
  2. php中使用mpdf,php-如何在中文中使用mPDF
  3. SpringBoot整合Knife4j框架
  4. 消费者组consumer group详解-Kafka从入门到精通(九)
  5. HDU2571 命运(dp问题)
  6. 锤子科技一款聊天软件——子弹短信
  7. DOM change 事件
  8. 马斯克发布机器人,“钢铁侠”那种!特斯拉推出全球最快AI计算机,自研芯片那种...
  9. Docker安装及下载镜像
  10. 防止异地登录的解决思路