什么是双亲委派机制

在介绍双亲委派模型之前先说下类加载器。对于任意一个类,都需要由加载它的类加载器和这个类本身统一确立在 JVM 中的唯一性,每一个类加载器,都有一个独立的类名称空间。类加载器就是根据指定全限定名称将 class 文件加载到 JVM 内存,然后再转化为 class 对象。 类加载器分类:

启动类加载器(Bootstrap ClassLoader),是虚拟机自身的一部分,用来加载Java_HOME/lib/目录中的,或者被 -Xbootclasspath 参数所指定的路径中并且被虚拟机识别的类库; 其他类加载器: 扩展类加载器(Extension ClassLoader):负责加载libext目录或Java. ext. dirs系统变量指定的路径中的所有类库; 应用程序类加载器(Application ClassLoader)。负责加载用户类路径(classpath)上的指定类库,我们可以直接使用这个类加载器。一般情况,如果我们没有自定义类加载器默认就是用这个加载器。 双亲委派模型:如果一个类加载器收到了类加载的请求,它首先不会自己去加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,这样所有的加载请求都会被传送到顶层的启动类加载器中,只有当父加载无法完成加载请求(它的搜索范围中没找到所需的类)时,子加载器才会尝试去加载类。

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

类加载器的类别

BootstrapClassLoader(启动类加载器)

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

ExtClassLoader (标准扩展类加载器)

java编写,加载扩展库,如classpath中的jrejavax.*或者
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 仍然没有加载过,则递归回来,尝试自己去加载classlong 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;}}

委派机制的流程图

双亲委派机制的作用

1、防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。
2、保证核心.class不能被篡改。通过委托方式,不会去篡改核心.clas,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。

什么是java双亲委派机制相关推荐

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

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

  2. java 委托_面试官:java双亲委派机制及作用

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

  3. 「 JVM基础 」Java双亲委派机制

    Java的双亲委派机制 参考&鸣谢 Dream_ling. weixin_39610188. JVM底层原理解析 文章目录 Java的双亲委派机制 一.介绍 二.什么是双亲委派机制 三.双亲委 ...

  4. JAVA 双亲委派机制

    最近突然看到了关于Java的双亲委派机制,作为一个搞Java的程序猿还是应该知道是怎么回事. 我用一个程序来简单说明是怎么回事吧 package java.util;/*** 本类中的main方法不会 ...

  5. java 双亲委派机制为什么叫“双亲”

    了解了双亲委派机制是什么之后,一直纠结为什么这里要叫"双亲",于是乎上网查了一些资料,大部分都说是翻译的问题,除此之外,其中一篇博客中提到了另一种见解,可以作为参考理解. &quo ...

  6. Java双亲委派机制在Android的应用

    Java的双亲委派机制 三层类加载器 1.启动类加载器(Bootstrap Class Loader) 这个类加载器负责加载存放在<JAVA_HOME>\lib目录,或者被-Xbootcl ...

  7. Java双亲委派机制

    1.什么是双亲委派? 虚拟机在加载类的过程中需要使用类加载器进行加载,而在Java中,类加载器有很多,那么当JVM想要加载一个.class文件的时候,到底应该由哪个类加载器加载呢? 这就不得不提到&q ...

  8. android双亲委派机制,3分钟了解Java双亲委派机制

    你得先知道 在介绍双亲委派机制的时候,不得不提 ClassLoader .说ClassLoader之前,我们得先了解下Java的基本知识. Java是运行在Java的虚拟机(.class 的 JVM中 ...

  9. java spi机制_Java 双亲委派机制的破坏—SPI机制

    作者:程序猿微录 出自:TinyRecord 原文:tinyice.cn/articles/123 Java 双亲委派机制的破坏-SPI机制 在Java的类加载机制中,默认的就是双亲委派机制,这种委派 ...

最新文章

  1. Vue 增加动态路由功能 【在原有系统上增加】
  2. 龙邱MPU9250传感器 | 使用ESP32 模块进行测试
  3. 克服SOA实施过程中的障碍
  4. 用3种方式解决复杂报表
  5. 爱立信将携手DOCOMO和英特尔构建5G测试环境
  6. 结对项目——数独扩展
  7. layer + ajax 弹出框
  8. cmake使用教程(五)调用opencv外部库和自己生成的库
  9. canoe Demo版本申请流程
  10. 数学建模优化模型简单例题_数学建模案例分析--最优化方法建模7习题六
  11. Kali-Linux windows 双系统的安装
  12. 如何用idea开发vue
  13. lenovo服务器换系统重装系统_电脑怎么重装系统lenovo
  14. python3 ZIP文件密码破解
  15. 模拟Android微信APK底部的TabHost选项卡
  16. foxmail邮件服务器端口,Foxmail IMAP设置
  17. ID BOX 121电子护照阅读器(带RFID双天线)参数与应用说明
  18. Idea打字变成繁体
  19. 【论文阅读笔记】Ristretto: Hardware-Oriented Approximation of Convolutional Neural Networks
  20. java 枚举类组合在一起_Java,.NET,但为什么在一起?

热门文章

  1. 2021 “AI Earth”人工智能创新挑战赛 AI助力精准气象和海洋预测
  2. 目标检测:Yolov5集百家之长
  3. ATen(A TENsor library for C++11)剖析(1)
  4. 【深度学习】神经网络基础:反向传播算法
  5. 【数据竞赛】NLP竞赛中99%上升的技巧!
  6. 【NLP】基于GloVe词向量的迁移学习
  7. 目前最全:52 个深度学习目标检测模型汇总,论文、源码一应俱全!
  8. AI入门:通俗讲解熵、交叉熵和 KL 散度
  9. NLP深度学习:PyTorch文本分类
  10. 2020数字中国创新大赛-智能算法赛-冠军方案分享