类加载器与双亲委派模型

类加载器

类加载的操作不是有虚拟机完成的,而是由类加载器完成的,这样可以让程序定义决定加载哪个类。
类加载器的分类:
从虚拟机的角度有两种加载器,一种是启动类加载器Bootstrap Classloader,它是由C语言编写的,是虚拟机的一部分;另一种的其他的所有加载器,它是由Java编写的,存在于虚拟机外部,这些加载器都继承于Java.lang.ClassLoader类
从开发者角度来说共有四种加载器,启动类加载器BootStap ClassLoader、扩展类加载器Extension ClassLoader、应用程序加载器Application ClassLoader、还有一种用户自定义加载器。
启动类加载器
负责将JAVA/HOME/lib文件夹下的类库加载到内存中。开发者无法直接使用启动类加载器进行类加载的任务
扩展类加载器
负责将JAVA/HOME/lib/ext目录或者由系统变量java.ext.dir指定的位置中的所有类库加载进来。
应用程序类加载器/系统类加载器
负责加载用户类路径上(ClassPath)所指定的类库。如果用户没有自定义加载器,那么这个就是程序中默认的类加载器。此类加载器可以通过
ClassLoader.getSystemClassLoader()获取。

双亲委派模型

当一个类加载器接到类加载任务时,会将其交给它的父类加载器,所以最终类加载任务会传递到启动类加载器,如果父类加载器不能完成加载任务,则由子类加载器尝试完成类的加载。

使用双亲委派模型的好处
无论哪个类加载器去加载一个类,最后加载这个类的类加载器是同一个,这保证了这个类在虚拟机中的唯一性。

参考:《深入理解Java虚拟机》

最新文章

  1. Java连接mysql数据库
  2. 打印机C++
  3. 在Mac OS X中使用VIM开发STM32(4)
  4. 猜测:信号槽的本质是使用Windows的自定义消息来实现的
  5. Windows系统下的TCP参数优化
  6. Vim的设置和使用——编程者
  7. Get Start StrangeIOC for Unity3D
  8. QDebug &operator<<出错(根据QString来找,是不得要领的,而是应该根据QString所在的对象来思考)
  9. luogu3830 [SHOI2012]随机树
  10. 页面系统,浏览器检测- 网页基础模块(JavaScript)
  11. Android Studio 小技巧
  12. HashMap底层原理分析(put、get方法)
  13. c# event Action 判断事件列表中是否存在这个委托
  14. HTML5 Storage(永久存储)
  15. tarjan算法求缩点+树形DP求直径
  16. yum安装apache及问题解决
  17. 简单的python爬虫--爬取Taobao淘女郎信息
  18. 【Python】学习笔记十:字典
  19. 【微信小程序】日历插件,适用于酒店订房类小程序
  20. Hadoop 使用Combiner提高Map/Reduce程序效率

热门文章

  1. 《c# 实现p2p文件分享与传输系统》 二、 设计
  2. 《c# 实现p2p文件分享与传输系统》 二、 设计 - 续(NAT穿透)
  3. asm 兼容性、asm 主要参数管理
  4. web攻击之零:WEB攻击及防御技术汇总
  5. VMware设置桥接网络
  6. 《精通Spring4.X企业应用开发实战》读后感第五章(<bean>之间的关系\整合多个配置文件)
  7. js中“||”和“&&”的高级用法
  8. VS2017 不能创建 vsto Excel 工作簿程序的问题
  9. js选中select
  10. 洛谷P4239 【模板】多项式求逆(加强版)(多项式求逆)