类加载器:

定义:java类加载器用于对java类的加载,java有自带的类加载器,也可以自定义类加载器实现定制化,类似于tomcat。

java自带了三个系统的类加载器:如下图:

双亲委派模型:
背景:
我们都知道,jdk中存在java.lang.String类,但是如果我们自定义一个全类名也为java.lang.String的类的话,如果都加载的话系统中就会存在多个全类名相同的类,这样会使得系统混乱。

双亲委派模型就是用于解决这个问题的。
定义:如果一个类加载器在接到加载类的请求时,它首先不会自己尝试加载这个类,而是把这个请求委托给自己的父类(注意:这里的父类不是继承关系,而是一个成员变量)加载器区完成,依次递归直至顶级BootStrap ClassLoader,如果父类可以完成类的加载任务,就成功返回,只有父类加载器无法完成加载任务时,才由自己加载,如果自己也没加载到,就抛出ClassNotFoundException。

再次引用上图并举例子进行讲解:

例如:

  1. 我们自定义了java.lang.String类,首先他会由App ClassLoader加载,App ClassLoader接收到该加载请求后,直接委托了给上级Extension ClassLoader加载,Extension ClassLoader又直接委托给了Bootstrap ClassLoader ,然后Bootstrap ClassLoader在他指定加载的目录位置jar包下寻找全类名为java.lang.String的类进行加载,加载完后直接返回,如果该全类名在Bootstrap ClassLoader指定的位置里找不到,就加载失败,由Extension ClassLoader 加载,如果还是没有,就由App ClassLoader加载,如果还没有,就抛出ClassNotFoundException。

相关代码:

protected Class<?> loadClass(String name, boolean resolve)throws ClassNotFoundException{synchronized (getClassLoadingLock(name)) {// First, check if the class has already been loadedClass<?> c = findLoadedClass(name);if (c == null) {long t0 = System.nanoTime();try {if (parent != null) {//如果上级类加载器不为空,则直接委托给上级类加载器加载。c = parent.loadClass(name, false);} else {//如果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.long t1 = System.nanoTime();c = findClass(name);// this is the defining class loader; record the statssun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);sun.misc.PerfCounter.getFindClasses().increment();}}if (resolve) {resolveClass(c);}return c;}}
//这个是java.lang.ClassLoader类的loaderClass方法。

总结:其实这个双亲加载模型使得类加载器具备了一定的优先级关系,比如BootStrap ClassLoader 是具有最高优先级的,如果BootStrap ClassLoader指定的路径上有该类,那么加载的必定是该类(在不破坏该模型的情况下)。

JVM初学之类java的类加载器和双亲委派模型相关推荐

  1. jvm:类加载器与双亲委派模型

    两个类相等需要类本身相等,并且使用同一个类加载器进行加载.这是因为每一个类加载器都拥有一个独立的类名称空间. 这里的相等,包括类的 Class 对象的 equals() 方法.isAssignable ...

  2. Android插件化开发基础之Java类加载器与双亲委派模型

    类加载器 Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程. 在加载阶段,java虚拟机需 ...

  3. 【深入理解JVM】:类加载器与双亲委派模型

    转载自  [深入理解JVM]:类加载器与双亲委派模型 类加载器 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因.在类加载的第一阶段" ...

  4. JVM 类加载器与双亲委派模型

    1. 类加载器 我们知道,虚拟机在加载类的过程中需要使用类加载器进行加载,而在 Java 中,类加载器有很多,那么当 JVM 想要加载一个 .class 文件的时候,到底应该由哪个类加载器加载呢?这时 ...

  5. JVM—类加载器和双亲委派模型

    关注微信公众号:CodingTechWork,一起工作学习总结. 文章目录 引言 类加载器 类与类加载器关系 类加载器分类 启动类加载器 扩展类加载器 应用程序类加载器 双亲委派模型 介绍 工作流程 ...

  6. 类加载器、双亲委派模型

    目录 1.简介 2.类和类加载器 3.双亲委派模型 3.1 启动类加载器: 3.2 扩展类加载器 3.3应用程序类加载器 3.4  类加载器的双亲委派模型(Parents Delegation Mod ...

  7. 类加载器以及双亲委派模型

    Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制. 自JDK1.2以来,Java ...

  8. 类加载器和双亲委派模型

    虚拟机设计团队有意把类加载阶段中的"通过一个类的全限定名来获取描述该类的二进制字节流"这个动作放到java虚拟机外部去实现,以便让应用程序自己决定获取所需的类.实现这个动作的代码被 ...

  9. 28 Java类的加载机制、什么是类的加载、类的生命周期、加载:查找并加载类的二进制数据、连接、初始化、类加载器、双亲委派模型、自定义类加载器

    28Java类的加载机制 28.1.什么是类的加载 28.2.类的生命周期 28.2.1.加载:查找并加载类的二进制数据 28.2.2.连接 28.2.3.初始化 28.3.类加载器 28.4.类的加 ...

最新文章

  1. 在Win7中安装Oracle 10g时检测报错的解决办法
  2. Kafka 入门 and kafka+logstash 实战应用
  3. SCI科技论文写作技巧-核心价值
  4. java 是否继续操作?代码
  5. Tensorflow学习教程------tensorboard网络运行和可视化
  6. windows7计算机管理,win7系统打开计算机管理(compmgmt.msc)的操作方法
  7. shell判断数组内是否包含某成员,获取数组长度
  8. java insert_java获取新insert数据自增id的实现方法
  9. DBA跳槽应该去大公司还是小公司?99%的人这样说...
  10. matlab绘制正弦波
  11. bim建模的过程的几个要点
  12. OGRE CG教程 (三): 渐隐效果
  13. BZOJ3503.【CQOI2014】和谐矩阵
  14. Golang内存分配逃逸分析
  15. 信息安全系统和安全体系
  16. [补充]上集 Ch. 19-12(AJAX)在ListView / GridView的「样版」里面,放置 UpdatePanel
  17. 基于javaweb+mysql的个人日记管理系统
  18. Java Swing实用小工具开发
  19. 网易七鱼在线客服系统web端对接
  20. 第二篇 基础篇—燃烧吧!我的雌雄双股剑! 第5回 二弟呀,面子工程很重要

热门文章

  1. Python数据分析学习笔记:计算相关系数
  2. 6.边缘检测:梯度——计算梯度Matlab实战_5
  3. 概率论 方差公式_概率论与数理统计课程教学、学习基本要求和教学建议
  4. 【英语学习】【WOTD】muse 释义/词源/示例
  5. 舞台灯恒流芯片 无频闪无噪音 多路共阳 调光深度0.1% 方案分享
  6. VS2010+Opencv-2.4.0的配置攻略
  7. centos8 安装geany
  8. 华为荣耀9x怎么解账户锁_荣耀X10顶配与30S最低配形成200元的价差,我觉得这样是最好的...
  9. jq选中单选框后文本框不可编辑_3个Excel工作表的数据输入编辑技巧,助你工作更轻松...
  10. HDR与ToneMapping