JVM类加载机制二
2024-09-03 14:06:45
类加载器与双亲委派模型
类加载器
类加载的操作不是有虚拟机完成的,而是由类加载器完成的,这样可以让程序定义决定加载哪个类。
类加载器的分类:
从虚拟机的角度有两种加载器,一种是启动类加载器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连接mysql数据库
- 打印机C++
- 在Mac OS X中使用VIM开发STM32(4)
- 猜测:信号槽的本质是使用Windows的自定义消息来实现的
- Windows系统下的TCP参数优化
- Vim的设置和使用——编程者
- Get Start StrangeIOC for Unity3D
- QDebug &;operator<;<;出错(根据QString来找,是不得要领的,而是应该根据QString所在的对象来思考)
- luogu3830 [SHOI2012]随机树
- 页面系统,浏览器检测- 网页基础模块(JavaScript)
- Android Studio 小技巧
- HashMap底层原理分析(put、get方法)
- c# event Action 判断事件列表中是否存在这个委托
- HTML5 Storage(永久存储)
- tarjan算法求缩点+树形DP求直径
- yum安装apache及问题解决
- 简单的python爬虫--爬取Taobao淘女郎信息
- 【Python】学习笔记十:字典
- 【微信小程序】日历插件,适用于酒店订房类小程序
- Hadoop 使用Combiner提高Map/Reduce程序效率
热门文章
- 《c# 实现p2p文件分享与传输系统》 二、 设计
- 《c# 实现p2p文件分享与传输系统》 二、 设计 - 续(NAT穿透)
- asm 兼容性、asm 主要参数管理
- web攻击之零:WEB攻击及防御技术汇总
- VMware设置桥接网络
- 《精通Spring4.X企业应用开发实战》读后感第五章(<;bean>;之间的关系\整合多个配置文件)
- js中“||”和“&;&;”的高级用法
- VS2017 不能创建 vsto Excel 工作簿程序的问题
- js选中select
- 洛谷P4239 【模板】多项式求逆(加强版)(多项式求逆)