Java的双亲委派机制是java中类加载过程采用的机制,所以首先要理解java的类加载过程。

类加载过程:程序经过javac.exe命令以后,会生成一个或多个class字节码文件,接着使用java.exe命令对某个class字节码进行解释运行时,相当于将这个class字节码加载到内存中,此过程就是类加载过程。

那么以上所说的类加载过程,就需要类加载器来完成啦。

java中类加载的过程采用双亲委派机制,加载一个类先由应用类加载器委托给扩展类加载器,再由扩展类加载器委托给启动类加载器,如果启动类加载器加载不了的话,则由扩展类加载器加载,如果扩展类加载器也加载不了的话,则由应用类加载器加载,如果连应用类加载器都找不到的话,则报ClassNotFound的异常。

源码:

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;}}

图片取自网络。

双亲委派机制的优点:

避免类的重复加载,保证只加载一次就够了。

提高了安全性,如果有人想要篡改String类的话,类加载器优先使用启动类加载器加载,发现已经加载过了,所以不会加载你自己写的String类(如果没有双亲委派机制的话,直接可以使用自定义类加载器了,就很不安全)。

补充:

加载到内存中的类叫做运行时类,一个运行时类就是一个Class实例。

启动类加载器:是用来加载jdk\jre\lib下的核心类库,比如rt.jar、resources.jar等。

扩展类加载器:是用来加载jdk\jre\lib\ext下的扩展类库中的jar包和.class文件。

应用类加载器:用来加载classpath下的jar包和.class文件。

Java的双亲委派机制相关推荐

  1. 关于Java类加载双亲委派机制的思考(附面试题)

    转载自 关于Java类加载双亲委派机制的思考(附面试题) 预定义类加载器和双亲委派机制 JVM预定义的三种类型类加载器: 启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 &l ...

  2. java类加载机制为什么双亲委派_[五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的...

    Launcher启动类 本文是双亲委派机制的源码分析部分,类加载机制中的双亲委派模型对于jvm的稳定运行是非常重要的不过源码其实比较简单,接下来简单介绍一下我们先从启动类说起有一个Launcher类 ...

  3. Java虚拟机-双亲委派机制

    文章目录 双亲委派机制概述 双亲委派机制原理 双亲委派机制的优势 沙箱安全机制 破坏双亲委派机制 双亲委派机制概述 Java虚拟机对class文件采用按需加载的方式,也就是说当需要使用该类时,才会将它 ...

  4. Java虚拟机 - 双亲委派机制

    文章目录 一.原理 二.作用 三.沙箱安全机制 四.补充内容 Java虚拟机对class文件采用的是 按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象.而且 ...

  5. Java打破双亲委派机制

    1.自定义加载器 沿用双亲委派机制自定义类加载器很简单,只需继承ClassLoader类并重写findClass方法即可. ①先定义一个待加载的类Test,它很简单,只是在构建函数中输出由哪个类加载器 ...

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

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

  7. JAVA 双亲委派机制

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

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

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

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

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

最新文章

  1. 产品经理刷题2020.09.20
  2. 关于团队建设,穆帅能教我们什么?
  3. Luogu P5652 基础博弈练习题 (博弈论、图论)
  4. java 怎么比较两个日期_如何在Java中比较两个日期?
  5. 光端机和收发器的区别有哪些?
  6. Spread基本知识(一)
  7. 1222-周一开盘红红火火大涨的一天。EG,PVC,沪铜,国际铜,纯碱涨停
  8. 如何将pdf生成二维码链接?
  9. 黑马程序员最新Python教程——第一阶段(1)
  10. 我有DIY一Android遥控-所有开源
  11. Python实现箱形图的绘制
  12. 教你如何关闭Surface Go的触摸键盘?
  13. ARM linux解析之压缩内核zImage的启动过程
  14. 杂记-2018.04.09
  15. 使用Docker部署Spring-Boot-项目,带劲!
  16. 苹果原装转接头不能连html,变革之际 iPhone 7P原装lightning耳机及转接头拆解
  17. python建立数据库连接时出错_python连接数据库
  18. java abcd_Java的一个小题目,字母abcd 对应1234类推,输入单词得到对应的数字和...
  19. 华为腾讯汉能:叫响世界的三大中国自主创新企业
  20. LeetCode DP基础

热门文章

  1. mysql xf0x9fx8ex88_关于twitter:字符串值不正确:’e???e?…’MySQL
  2. matplotlib隐藏刻度线、标签和边线
  3. 智能网联汽车产业风口下,长沙如何翻江涌潮?
  4. springcloud-gateway集成knife4j(swagger2)
  5. 基于JAVA印染公司信息管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
  6. 降薪求职,看的是未来
  7. 密信(MeSince)的诞生,全自动加密信息已来临!
  8. php盒子模型,HTML与CSS的盒子模型
  9. centos7下载setoolkit并克隆网站(fishing网站)
  10. 如何选购自己满意的主板(建议观看)