精华内容
下载资源
问答
  • 双亲委派模型

    2019-12-16 11:08:10
    Java中类加载的双亲委派模型 这几种类加载器的层次关系如下所示: ####定义 这种层次关系称为类加载器的双亲委派模型。我们把每一层上面的类加载器叫做当前层类加载器的父加载器,当然,它们之间的父子关系并不是...

    Java中类加载的双亲委派模型
    这几种类加载器的层次关系如下图所示:
    在这里插入图片描述
    ####定义
    这种层次关系称为类加载器的双亲委派模型。我们把每一层上面的类加载器叫做当前层类加载器的父加载器,当然,它们之间的父子关系并不是通过继承关系来实现的,而是使用组合关系来复用父加载器中的代码。该模型在JDK1.2期间被引入并广泛应用于之后几乎所有的Java程序中,但它并不是一个强制性的约束模型,而是Java设计者们推荐给开发者的一种类的加载器实现方式。
    ####工作流程
    如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只有当父加载器在它的搜索范围中没有找到所需的类时,即无法完成该加载,子加载器才会尝试自己去加载该类。
    ####优势
    使用双亲委派模型来组织类加载器之间的关系,有一个很明显的好处,就是Java类随着它的类加载器(说白了,就是它所在的目录)一起具备了一种带有优先级的层次关系,这对于保证Java程序的稳定运作很重要。例如,类java.lang.Object类存放在JDK\jre\lib下的rt.jar之中,因此无论是哪个类加载器要加载此类,最终都会委派给启动类加载器进行加载,这就保证了Object类在程序中的各种类加载器中都是同一个类。

    展开全文
  • 浅谈双亲委派模型

    2019-03-17 13:17:36
    双亲委派模型2.1什么是双亲委派模型2.2双亲委派模型的工作过程2.3图例解释如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也...

    0. 引子

    为什么要有双亲委派模型

    如果黑客定义一个了java.lang.String类,并且自定义了一些与常用方法同名的方法(如equals)里面除了原有功能外可能含有一些“病毒代码”,并通过自定义类加载器加入到JVM中。此时,如果没有双亲委派模型,那么JVM就可能误以为黑客自定义的java.lang.String类是系统的String类,导致“病毒代码”被执行。

    1.类加载器

    在谈双亲委派模型之前,我们需要先了解类加载器。

    1.1什么是类加载器

    简单来说,类加载器就是根据指定全限定名称将class文件加载到JVM内存,转为Class对象。

    1.2几种主要的类加载器

    1. 启动类加载器(Bootstrap ClassLoader):
      负责将存放在<JAVA_HOME>\lib目录或-Xbootclasspath参数指定的路径中的类库加载到内存中。由于是用C++语言实现(针对HotSpot)因此在获取加载器时无法以Java的形式来表示(null)。
    2. 扩展类加载器(Extension ClassLoader):
      负责加载<JAVA_HOME>\lib\ext目录或java.ext.dirs系统变量指定的路径中的所有类库。
    3. 应用程序类加载器(Application ClassLoader):
      负责加载用户类路径(classpath)上的指定类库,我们可以直接使用这个类加载器。一般情况,如果我们没有自定义类加载器默认就是用这个加载器。

    1.3加载顺序

    在这里插入图片描述

    2.双亲委派模型

    2.1什么是双亲委派模型

    双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。

    2.2双亲委派模型的工作过程

    如果一个类加载器收到类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器完成。每个类加载器都是如此,只有当父加载器在自己的搜索范围内找不到指定的类时(即ClassNotFoundException),子加载器才会尝试自己去加载。
    我们可以通过getParent()自行找到父加载器。
    注意加载器之间的父子关系实际上指的是加载器对象之间的包装关系,而不是类之间的继承关系。

    2.3图例解释

    在这里插入图片描述

    3.总结

    每个加载器都优先尝试用父类加载,若父类不能加载则自己尝试加载;若成功则返回Class对象给子类,若失败则告诉子类让子类自己加载。所有都失败则抛出异常。

    3.1优点

    对于同一个类, 永远只会由同一个类加载器去加载。
    例如java.lang.String, 无论在哪个层次的类加载器请求加载, 都会转发到启动类加载器进行加载, 因此程序中永远只有一个Object, 而不会出现另一个同名不同性质的String。
    越基础的类, 由越高层的类加载器加载. 用户定义的类, 由低级一点的类加载器加载, 例如用户自定义类加载器。
    这样就防止了类的二次加载,提高了安全性。

    3.2最后

    承接上面的引子,有了双亲委派模型,黑客自定义的java.lang.String类永远都不会被加载进内存啦。因为首先是最顶端的类加载器加载系统的java.lang.String类,最终自定义的类加载器是无法加载java.lang.String类的。

    展开全文
  • jdk9之后的双亲委派模型:从中可以看出,jdk9中,取消了扩展类加载器,取代他的是平台类加载器。加载过程:在平台类加载器及应用程序类加载器收到加载请求时,在委派给父类加载器之前,会先判断该类能否归属到一个...

    jdk9之前的双亲委派模型:

    jdk9之前的双亲委派模型:

    加载器收到加载请求时,会优先委派给其父类加载器,即都会到bootstrap ClassLoader这一步,当父加载器加载失败时,会向下交给子加载器去加载。

     

    jdk9之后的双亲委派模型:

    jdk9之后的双亲委派模型:从图中可以看出,jdk9中,取消了扩展类加载器,取代他的是平台类加载器。加载过程:在平台类加载器及应用程序类加载器收到加载请求时,在委派给父类加载器之前,会先判断该类能否归属到一个系统模块中,如果能,就需要优先委派给负责那个模块的加载器完成加载。

    展开全文
  • 双亲委派模型 模型如下双亲委派模型中除了启动类加载器之外其余都需要有自己的父类加载器 当一个类收到了类加载请求时: 自己不会首先加载,而是委派给父加载器进行加载,每个层次的加载器都是这样。 所以...
        

    双亲委派模型

    模型如下图:

    双亲委派模型中除了启动类加载器之外其余都需要有自己的父类加载器

    当一个类收到了类加载请求时: 自己不会首先加载,而是委派给父加载器进行加载,每个层次的加载器都是这样。

    所以最终每个加载请求都会经过启动类加载器。只有当父类加载返回不能加载时子加载器才会进行加载。

    双亲委派的好处 : 由于每个类加载都会经过最顶层的启动类加载器,比如 java.lang.Object这样的类在各个类加载器下都是同一个类(只有当两个类是由同一个类加载器加载的才有意义,这两个类才相等。)

    如果没有双亲委派模型,由各个类加载器自行加载的话。当用户自己编写了一个 java.lang.Object类,那样系统中就会出现多个 Object,这样 Java 程序中最基本的行为都无法保证,程序会变的非常混乱。

    11863677-c11a9f7da9f0dbcc.jpg
    矿洞程序员.jpg

    展开全文
  • 从jvm中存在两种类加载器, 一个是启动类加载器,由c++语言实现,用来加载jre/lib/rt.jar 另一个就是其他类加载器,由java语言实现,继承自抽象...双亲委派模型的工作原理: 如果一个类加载器收到类加载的请求,它首先
  • JVM进阶(十六)——JAVA 双亲委派模型

    万次阅读 2017-03-13 15:01:48
    JVM进阶(十六)——JAVA 双亲委派模型  在上一篇博文中,我们知道了如何获得二进制的字节流,并根据获得的字节流去装载一个类。同时也了解到类加载器的存在,每个加载器对应着不同的加载目录,相互配合着,从而使...
  • 类加载器的双亲委派模型 首先不用管上面的各种加载器,他们属于类加载器的不同类型。 如果收到了类加载的请求,首先不会自己去尝试去加载,而是去找父类看看行不行,父类仍然还会继续往上找,直到不行为止,这...
  • 1、两种不同的类加载器  从JAVA虚拟机的角度来讲,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现,是虚拟机...2、类加载器双亲委派模型图   3、对4个...
  • 一、java类加载过程(双亲委派模型) 我们先来看一张图片,有助于理解类加载器与类加载过程。 概念 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接时候...
  • 昨天突然想到了一个点,这个双亲委派模型的意义是什么呀 ?如果说没有这个模型会变的怎么样? 双亲委派模型 有几类 类加载器 : 启动类加载器(Bootstrap classloader)、扩展类加载器(Extension classloader) 、 ...
  • 1.双亲委派模型是一种类加载的时候用到的一种模型,它指定了使用什么样的规则来加载类,指定了按照什么样的顺序来调用类加载器从而加载类。至于叫双亲委派,其实是不对的,不像数据结构中树的双亲那样含义明确;不过...
  • Java的类加载过程中涉及到双亲委派模型,而提到双亲委派模型又免不了讨论类的加载过程,所以这两者放到一块了解更加合适。 Java的类加载过程可以分为三个步骤:加载、连接、初始化。其中连接过程又可以分为验证、...
  • 展示了类加载器之间的层次关系,称为双亲委派模型(Parents Delegation Model)。该模型要求除了顶层的启动类加载器外,其它的类加载器都要有自己的父类加载器。这里的父子关系一般通过组合关系(Composition)...
  • 展示了类加载器之间的层次关系,称为双亲委派模型(Parents Delegation Model)。该模型要求除了顶层的启动类加载器外,其它的类加载器都要有自己的父类加载器。类加载器之间的父子关系一般通过组合关系...
  • JAVA通过自定义类加载器加载外部目标类双亲委派模型下类加载流程自定义类加载器测试执行结果 双亲委派模型下类加载流程 流程示意,具体源码如下: protected Class<?> loadClass(String name, boolean ...
  • 类加载器双亲委派模型,如下所示: 双亲委派模型的工作过程  如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此...
  • 2、双亲委派模型 3、双亲委派模型实现源码 4、自定义类加载器  在上一篇博客,我们介绍了类加载过程,包括5个阶段,分别是“加载”,“验证”,“准备”,“解析”,“初始化”,如下所示:    本篇...
  • 看过这篇文章,大厂面试你「双亲委派模型」,硬气的说一句,你怕啥?读该文章姿势打开手头的 IDE,按照文章内容及思路进行代码跟踪与思考手头没有 IDE,先收藏,回头看 (万一哪次面试问了呢)需要查看和拷贝代码以及...
  • ClassLoader双亲委派模型loadClass过程

    千次阅读 2010-02-15 23:53:00
    Java2加载类是通过双亲委派模型来的,而jdk给我们提供的默认的System ClassLoader -- AppClassLoader的loadClass方法是如何加载类呢?1、首先要说明jdk的几个classloader的静态继承关系,如:2、而运行时刻,...
  • 双亲委派机制

    2020-05-05 09:55:23
    类加载器双亲委派模型图 双亲委派模型构成 启动类加载器,扩展类加载器,应用程序类加载器,自定义类加载器 双亲委派模型工作过程是 如果一个类加载器收到类加载的请求,它首先不会自己去尝试加载这个类,而是把这...
  • 双亲委派模型: 背景: 我们都知道,jdk中存在java.lang.String类,但是如果我们自定义一个全类名也为java.lang.String的类的话,如果都加载的话系统中就会存在多个全类名相同的类,这样会使得...
  • 在上一篇博文中,我们知道了如何获得二进制的字节流,并根据获得...   首先我们来看一张:   中除了最底下的那个加载器是我们没有讲到的,其余的都有说到过。其实底下那个就是我们自己实现的类加载器,用...
  • 类从被加载到虚拟机中内存开始,到卸载除内存为止,它的生命周期包括如下所示: 上中的 加载,验证,准备,初始化,卸载这5个步骤的顺序是固定的,类的加载器也必须按这个顺序开始,而解析阶段则不一定,它...
  • JAVA 双亲委派及如何打破双亲委派原则解释双亲委派模型图如何打破这种加载模型总结 双亲委派原则解释 java为了类加载安全定义了一个原则,那就是双亲委派原则 解释:所有类的加载都被委派给父类加载,只有父类不能...
  • ​ 通过编译成class文件然后交给jvm执行,如下列流程: graph LR A[java后缀文件: user.java] --打包编译--> B[class后缀文件:user] B--->jvm[jvm实例] subgraph JVM jvm--类加载器-->id3[类加载器] ...
  • 在上一篇博客,我们介绍了类加载过程,包括5个阶段,分别是“加载”,“验证”,“准备”,“解析”,“初始化”,如下所示: 本篇博客,我们来介绍Java虚拟机的双亲委派模型,在介绍之前,我先抛出一个问题: ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 119
精华内容 47
关键字:

双亲委派模型图