JAVA类加载器包括几种?
引导类加载器 bootstrap class loader
  启动类加载器主要加载的是JVM自身需要的类,这个类加载使用C++语言实现的,是虚拟机自身的一部分,它负责将 /lib路径下的核心类库或-Xbootclasspath参数指定的路径下的jar包加载到内存中,注意必由于虚拟机是按照文件名识别加载jar包的,如rt.jar,如果文件名不被虚拟机识别,即使把jar包丢到lib目录下也是没有作用的(出于安全考虑,Bootstrap启动类加载器只加载包名为java、javax、sun等开头的类

扩展类加载器 extensions class loader
  它负责加载JAVA_HOME/lib/ext目录下或者由系统变量-Djava.ext.dir指定位路径中的类库,开发者可以直接使用标准扩展类加载器。

应用程序类加载器 application class loader
  应用程序加载器是指 Sun公司实现的sun.misc.Launcher$AppClassLoader。它负责加载系统类路径java -classpath或-D java.class.path 指定路径下的类库,也就是我们经常用到的classpath路径,开发者可以直接使用系统类加载器,一般情况下该类加载是程序中默认的类加载器,通过ClassLoader#getSystemClassLoader()方法可以获取到该类加载器。

自定义类加载器 java.lang.classloder
  就是自定义啦,通过继承java.lang.ClassLoader类的方式

类加载器之间的关系
  启动类加载器,由C++实现,没有父类。
  拓展类加载器(ExtClassLoader),由Java语言实现,父类加载器为null
  系统类加载器(AppClassLoader),由Java语言实现,父类加载器为ExtClassLoader
  自定义类加载器,父类加载器肯定为AppClassLoader。

双亲委派机制
  请注意双亲委派模式中的父子关系并非通常所说的类继承关系。
  其工作原理的是:如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式,即每个儿子都很懒,每次有活就丢给父亲去干,直到父亲说这件事我也干不了时,儿子自己想办法去完成。

双亲委派机制作用
  通过这种层级关可以避免类的重复加载,当父亲已经加载了该类时,就没有必要子ClassLoader再加载一次。其次是考虑到安全因素,java核心api中定义类型不会被随意替换,假设通过网络传递一个名为java.lang.Integer的类,通过双亲委托模式传递到启动类加载器,而启动类加载器在核心Java API发现这个名字的类,发现该类已被加载,并不会重新加载网络传递的过来的java.lang.Integer,而直接返回已加载过的Integer.class,这样便可以防止核心API库被随意篡改

如何自定义一个类加载器?
  通过继承ClassLoad定义一个类加载器。

应用场景
  如Tomcat容器,每个WebApp有自己的ClassLoader,加载每个WebApp的ClassPath路径上的类,一旦遇到Tomcat自带的Jar包就委托给CommonClassLoader加载。同包的隔离。另外成熟的开源框架,都有自己的classloade。
————————————————
版权声明:本文为CSDN博主「一包大豫竹」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33583322/article/details/81239508

JAVA类加载器包括几种?它们之间的关系是怎么样的?双亲委派机制是什么意思?有什么好处?相关推荐

  1. 深入类加载器-类加载器作用,类缓存、类加载器的层次结构、ClassLoader类介绍、代理模式之双亲委派机制

    1.类加载器的作用 类加载器的作用是将class字节码文件加载到内存中,并将这些静态数据转化为方法区中的运行时数据结构,同时在堆中生成代表这个类的java.lang.Class对象,作为访问方法区中数 ...

  2. JVM学习笔记之-类加载子系统,类的加载与类的加载过程,双亲委派机制

    一 类加载器与类加载过程 类加载子系统作用 类加载器子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识. ClassLoader只负责class文件的加载,至于 ...

  3. java类加载器正确的是_Java面试题:面向对象,类加载器,JDBC, Spring 基础概念

    1. 为什么说Java是一门平台无关语言? 平台无关实际的含义是"一次编写到处运行".Java 能够做到是因为它的字节码(byte code)可以运行在任何操作系统上,与底层系统无 ...

  4. (二)JVM成神路之剖析Java类加载子系统、双亲委派机制及线程上下文类加载器

    引言 上篇<初识Java虚拟机>文章中曾提及到:我们所编写的Java代码经过编译之后,会生成对应的class字节码文件,而在程序启动时会通过类加载子系统将这些字节码文件先装载进内存,然后再 ...

  5. Java类加载器( 死磕9)

    [正文]Java类加载器(  CLassLoader ) 死磕9:  上下文加载器原理和案例 本小节目录 9.1. 父加载器不能访问子加载器的类 9.2. 一个宠物工厂接口 9.3. 一个宠物工厂管理 ...

  6. java类加载器分类_Java类加载器特点的具体介绍

    Java类加载器一个我们经常使用的优秀语言,但是在我们使用的过程中有不少的问题需要我们解决.下面我们就详细的来看看相关问题的解决方法.想大家有所收获. Java类加载器的特性: 每个ClassLoad ...

  7. JVM入门(位置、体系结构、类加载器、双亲委派机制、沙箱安全机制、Native、PC寄存器、方法区、堆(新生区{伊甸园区、幸存区}、养老区、永久区)、OOM、GC算法、JMM)

    目录 一.JVM的位置 二.JVM的体系结构 三.类加载器 1.类加载器举例 2. JVM中提供了三层的ClassLoader 3. 双亲委派机制(重要) 3.1 工作原理 3.2.优点 四.沙箱安全 ...

  8. java类加载过程(双亲委派机制)

    类加载运行全过程 通过Java命令执行代码的大体流程如下: 其中loadClass的类加载过程有如下几步: 加载 >> 验证 >> 准备 >> 解析 >> ...

  9. JVM-白话聊一聊JVM类加载和双亲委派机制源码解析

    文章目录 Java 执行代码的大致流程 类加载loadClass的步骤 类加载器和双亲委派机制 sun.misc.Launcher源码解析 Launcher实例化 Launcher 构造函数 双亲委派 ...

最新文章

  1. Thttpd manual
  2. 查询附近的人——GEO
  3. 关于用隐藏文字(图片替换文字)的更好的可用性方法
  4. 【计算机组成原理】CPU:单周期数据通路(MIPS)
  5. 操作选项_Win 10系统中的电源选项及任务栏图标等功能介绍和操作
  6. Rational Rose如何删除线段
  7. 图形美不胜收,25 个可视化案例,Matplotlib 始终都是数据可视化绕不开的 Python 库
  8. 【软件逆向-分析工具】反汇编和反编译工具
  9. 生命密码:你的第一本基因科普书
  10. Eclipse设置护眼浅绿色背景
  11. 需求预测——Predicting origin-destination ride-sourcing demand with a spatio-temporal encoder-decoder
  12. 【详细】【转】CentOS 7部署ASP.NET Core应用程序
  13. pytho基础(6)
  14. IT人转型的终极目标
  15. linux安装软件时/usr/lib/python2.7/site-packages/urlgrabber/grabber.py文件异常
  16. GSR2501国产2.4G PA替代RFX2401C,AT2401C,RT201
  17. 轻量级网络——MobileNet系列学习(理论篇)
  18. c++实验三:继承与派生
  19. Pinia基本使用与源码分析-手动实现部分主要功能
  20. 关于win 10 WLAN连接红叉的问题解决

热门文章

  1. 干货!我的科研生涯:从博士到博导
  2. word删除脚注之后的空白行怎么删除
  3. python报错及解决办法汇总
  4. 生物信息学在线服务器,生物信息学杂志
  5. 【数据结构】【堆】堆的建立、插入和删除
  6. BZOJ1654 奶牛舞会+tarjan算法(入门题目)+判断图中有几个环
  7. 管家婆服装 手持终端wince 盘点程序
  8. 年终颁奖盛典PPT模板
  9. Latex修改目录格式
  10. 【算法】KMP算法完全解析(C语言实现)