精华内容
下载资源
问答
  • 什么是Java的双亲委派

    什么是Java的双亲委派

    展开全文
  • 双亲委派机制是类加载机制的工作模型,它使得类加载器有了存在优先级高低的层级结构。双亲委派机制的核心思想就是:当一个类加载器收到类加载请求时,它不会马上自己进行加载,而是将加载请求委托给父加载器,在父...

    双亲委派机制是类加载机制的工作模型,它使得类加载器有了存在优先级高低的层级结构。双亲委派机制的核心思想就是:当一个类加载器收到类加载请求时,它不会马上自己进行加载,而是将加载请求委托给父加载器,在父加载器中也会重复这么一个操作。只有当父加载器无法完成加载时,自己才会尝试进行去加载。

    双亲委派机制主要有两个好处:

    避免类被重复加载。当父类完成加载之后,子类就不需要再加载了,直接返回

    保证同一个Class最终能被同一个类加载器加载,这有助于Java程序的稳定运行。举个例子,比如java.lang.Object类,即使用不同的类加载器去加载它,这个加载请求最终都会委派到启动类加载器中,所以在JVM中Object类始终只有一个。否则的话,如果我们自定义了一个Object类,然后用不同的类加载器进行加载,那在系统中就会有多个Object类,JVM就一片混乱了。

    双亲委派模型在Java中也能有所体现。ClassLoader类中的loadClass方法就实现这个模型。这个方法过程很简单。首先使用synchronized设立同步区,这样可以保证类不会被重复加载。然后当类不为空时才进行加载,加载过程首先是调用父加载器的loadClass方法,当父加载器无法加载时,才会调用当前的findClass进行字节流的获取。这个findClass方法在ClassLoader里面是直接抛出了一个异常,也就是说,如果需要自定类加载器,是需要重写该方法的。

    展开全文
  • 什么是双亲委派机制当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。类加载器的类别BootstrapClassLoader...

    什么是双亲委派机制

    当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。

    类加载器的类别

    BootstrapClassLoader(启动类加载器)

    c++编写,加载java核心库 java.*,构造ExtClassLoader和AppClassLoader。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作

    ExtClassLoader (标准扩展类加载器)

    java编写,加载扩展库,如classpath中的jre ,javax.*或者

    java.ext.dir 指定位置中的类,开发者可以直接使用标准扩展类加载器。

    AppClassLoader(系统类加载器)

    java编写,加载程序所在的目录,如user.dir所在的位置的class

    CustomClassLoader(用户自定义类加载器)

    java编写,用户自定义的类加载器,可加载指定路径的class文件

    源码分析

    protected Class> loadClass(String name, boolean resolve)

    throws ClassNotFoundException

    {

    synchronized (getClassLoadingLock(name)) {

    // 首先检查这个classsh是否已经加载过了

    Class> c = findLoadedClass(name);

    if (c == null) {

    long t0 = System.nanoTime();

    try {

    // c==null表示没有加载,如果有父类的加载器则让父类加载器加载

    if (parent != null) {

    c = parent.loadClass(name, false);

    } else {

    //如果父类的加载器为空 则说明递归到bootStrapClassloader了

    //bootStrapClassloader比较特殊无法通过get获取

    c = findBootstrapClassOrNull(name);

    }

    } catch (ClassNotFoundException e) {}

    if (c == null) {

    //如果bootstrapClassLoader 仍然没有加载过,则递归回来,尝试自己去加载class

    long t1 = System.nanoTime();

    c = findClass(name);

    sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);

    sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);

    sun.misc.PerfCounter.getFindClasses().increment();

    }

    }

    if (resolve) {

    resolveClass(c);

    }

    return c;

    }

    }

    委派机制的流程图

    1e4011617650

    image.png

    双亲委派机制的作用

    1、防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。

    2、保证核心.class不能被篡改。通过委托方式,不会去篡改核心.clas,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。

    展开全文
  • 经过上回的讲解,相信大家都已经对双亲委派机制有一定的了解了吧,那你们知道双亲委派机制都有哪些特性吗?下面就听我来介绍一下吧。一、双亲委派机制是什么?首先让我们先复习一下双亲委派机制的基本概念吧,双亲委派...

    经过上回的讲解,相信大家都已经对双亲委派机制有一定的了解了吧,那你们知道双亲委派机制都有哪些特性吗?下面就听我来介绍一下吧。

    一、双亲委派机制是什么?

    首先让我们先复习一下双亲委派机制的基本概念吧,双亲委派机制指当某一个列要加载一个特定类时,不是立刻由自己加载,而是把这个任务委托给父加载器完成,如果父加载器上还有父加载器,就再委托给爷爷,直到根类加载器,如果根类加载器加载不成功,流程就要往下返回给拓展加载器,一直往下。这中间只要有一个类加载器加载成功,就返回成功。

    二、双亲委派模型构成组件

    1. 启动类加载器

    引导类装入器是用本地代码实现的类装入器,它会负责将 /libwen下面的类库加载到内存中。引导类加载器由于涉及到虚拟机本地实现细节,程序员无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。

    2. 扩展类加载器

    扩展类加载器是由 Sun 的 ExtClassLoader实现的。它负责将<

    Java_Runtime_Home >/lib/ext 或者由系统变量 java.ext.dir

    指定位置中的类库加载到内存中。程序员可以直接使用标准扩展类加载器。

    3. 系统类类加载器

    系统类加载器是由 Sun 的

    AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的。它负责将系统类路径(CLASSPATH)中指定的类库加载到内存中。程序员可以直接使用系统类加载器

    4. 自定义类加载器

    三、双亲委派模型工作过程

    当一个类加载器收到了类加载的请求,它不会先自己去加载这个类,而是会把这个请求委派给父类加载器完成。每个类加载器都会这样,只有当父类加载器在自己搜索范围内找不到指定类ClassNotFoundException时,子加载器才会尝试自己去加载。

    这就是所有内容了,有关java常见问答的更多内容请持续关注我们了解吧。

    推荐阅读:

    展开全文
  • 说到双亲委派机制,就必须要先要弄清楚Java的类加载器什么是类加载器Java类加载器(ClassLoader)是Java运行时环境(JRE)的一部分,负责动态的将Java类加载到Java虚拟机的内存空间。类加载器有哪些主要有三个:引导类...
  • 双亲委派机制作用 2.1 什么是双亲委派机制 当某个类加载器要加载 .class文件时,先上级类加载器去加载,一直递归下去,如果上级类加载器没有加载,则自己在去加载。 2.2 类加载器的区别 启动类加载器 ...
  • 深入理解双亲委派机制作用

    千次阅读 多人点赞 2020-04-03 16:34:38
    java双亲委派机制作用 一、什么是双亲委派机制 当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。 二、...
  • 双亲委派机制   双亲委派机制是指当一个类加载器收到一个类加载请求时,该类加载器首先会把请求委派给父类加载器。每个类加载器都是如此(递归的去查找),只有在父类加载器在自己的搜索范围内找不到指定类时,子类...
  • Java面试官:java双亲委派机制作用双亲委派机制是什么东东?双亲委派机制的第一个好处:双亲委派机制的第二个好处: 双亲委派机制是什么东东? 双亲委派机制是类加载机制的工作模型,它使得类加载器有了存在优先级...
  • jvm的双亲委派机制作用 什么是双亲委派机制 当某个类加载器需要加载某个**.class文件时,它首先把这个任务委托给他的上级类加载器**,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类,有就加载...
  • 什么是双亲委派机制当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。类加载器的类别BootstrapClassLoader...
  • 什么是双亲委派机制 当某个类加载器需要加载某个.class文件时,它首先委托给上级类加载器,依次递归,如果上级类加载器没有加载,自己才会去加载这个类。 类加载器的类别 BootstrapClassLoader(启动类加载器) 1....
  • 什么是双亲委派机制 当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。 类加载器的类别 BootstrapClassLoader...
  • 双亲委派机制

    2020-07-29 08:30:34
    双亲委派机制 一、什么是双亲委派机制 每个类加载器都有自己的一个加载路径,当某个类加载器需要加载某个.class文件时,它不是立刻从自己的加载路径中去找这个class文件,而是委派给它的父类加载器去加载。它的...
  • 1,双亲委派机制是什么? 当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。 类加载器的分类 ...
  • 首先我们了解下什么是双亲委派机制?当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。Java虚拟机对class文件...
  • 今天要谈一谈在面试过程中几乎被每个面试官都会提到的一个问题——java中双亲委派机制作用?  由于我也是刚刚学习编程的小白,所以此篇博文将参考了多篇博文,最后总结而成。 1.什么是双亲委派机制  当某个类...
  • 什么是双亲委派机制 当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。 类加载器的类别 ...
  • 什么是双亲委派机制  当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。 类加载器的类别 ...
  • 双亲委派机制作用1、保证安全性2、保证唯一性 1.什么是双亲委派机制 当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去...
  • JAVA中双亲委派机制的原理及其作用 什么是双亲委派 当某个类要去加载的时候先去父类里看看这个类有没有被加载过,没有的话再去父类的父类去找,有点类似于递归查找,如果没有的话再自己加载。 有些什么类加载器 ...
  • JVM双亲委派机制详解

    2020-10-25 23:13:45
    JVM双亲委派机制详解前言学习后可以解决的问题类加载器的分类分类每个类加载器的作用启动类加载器扩展类加载器应用程序类加载器自定义类加载器解决方法:双亲委派包含内容向上委派如何理解向上委派?向上委派的过程...
  • 怎么打破双亲委派机制

    千次阅读 2018-07-19 23:54:38
    今天在看面经的时候看到一个问题,怎么打破双亲委派机制,觉得很有意思,一般来说面试官关心的都是双亲委派机制的三个特性或者说这个机制的作用,第一次看到这样问的,于是来总结一下打破这个机制的方法: ...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 308
精华内容 123
关键字:

双亲委派机制作用