深入理解JVM(7)——类加载器
一、类和类加载器
a) 类加载器的作用:将class文件加载到JVM的方法区,并且在方法区中创建一个java.lang.Class对象作为外界访问这个类的接口。
b) 类和类加载器的关系:比较两个类是否相等,只有当这两个类由同一个类加载器加载才有意义;否则,即使同一个class文件被不同的类加载器加载,这两个类必定不相同。
二、类加载器的种类:
a) 启动类加载器
b) 扩展类加载器
c) 应用程序类加载器
三、双亲委派模型
a) 工作过程:如果一个类加载器收到一个类的加载请求,它首先将请求交由父类加载器进行加载,如果父类加载器加载失败,当前的类加载器才自己加载这个类,但无论那个类加载器加载这个类,最后都会返回一个关于该类的Class对象。
b) 作用:像java.lang.Object这些存放在Java基础类库中的类,无论使用哪个类加载器加载,最终都会委派给最顶端的启动类加载器加载,从而使得不同加载器加载的Object类都是同一个。
c) 双亲委派模型的实现原理:双亲委派模型的代码在java.lang.ClassLoader类中的loadClass函数中实现:
- 首先检查类是否被加载
- 若类未被加载,则调用父类加载器的loadClass方法;
- 若父类加载器的loadClass方法出现ClassNotFoundException异常,则表示父类加载器无法加载,则当前类加载器调用findClass加载类;
- 若父类加载器可以加载,则直接返回Class对象
深入理解JVM(7)——类加载器的更多相关文章
- 【深入理解JVM】类加载器与双亲委派模型 (转)
		出处: [深入理解JVM]类加载器与双亲委派模型 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因.在类加载的第一阶段“加载”过程中,需要通过 ... 
- 【深入理解JVM】类加载器与双亲委派模型
		原文链接:http://blog.csdn.net/u011080472/article/details/51332866,http://www.cnblogs.com/lanxuezaipiao/p ... 
- 深入理解JVM一类加载器原理
		我们知道我们编写的java代码,会经过编译器编译成字节码文件(class文件),再把字节码文件装载到JVM中,映射到各个内存区域中,我们的程序就可以在内存中运行了.那么字节码文件是怎样装载到JVM中的 ... 
- 深入理解JVM,类加载器
		虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流(即字节码)”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码模块称 ... 
- JVM自定义类加载器加载指定classPath下的所有class及jar
		一.JVM中的类加载器类型 从Java虚拟机的角度讲,只有两种不同的类加载器:启动类加载器和其他类加载器. 1.启动类加载器(Boostrap ClassLoader):这个是由c++实现的,主要负责 ... 
- 深入理解JVM之类加载
		---title: [学习]深入理解JVM之类加载.mddate: 2019-10-20 22:20:06tags: JVM 类加载--- Java类的加载,连接,初始化都是在程序运行期间执行的 ## ... 
- 1.1 jvm核心类加载器--jdk源码剖析
		目录 前提: 运行环境 1. 类加载的过程 1.1 类加载器初始化的过程 1.2 类加载的过程 1.3 类的懒加载 2. jvm核心类加载器 3. 双亲委派机制 4. 自定义类加载器 5. tomca ... 
- 深入理解:java类加载器
		概念理解:Java类加载器总结 1.深入理解Java类加载器(1):Java类加载原理解析 2.深入理解Java类加载器(2):线程上下文类加载器 
- 深入理解JVM(3)——类加载机制
		1.类加载时机 类的整个生命周期包括了:加载( Loading ).验证( Verification ).准备( Preparation ).解析( Resolution ).初始化( Initial ... 
- 深入理解JVM的类加载
		前言: 前面又说到Java程序实际上是将.class文件放入JVM中运行.虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换,解析和初始化,最终形成可以被虚拟机直接使用的Java类 ... 
随机推荐
- yarn的安装与使用及与npm对应的命令
			在Nodejs环境下,通过npm install -g yarn 命令进行全局安装 例如:yarn versionyarn inityarn installyarn add vueyarn add v ... 
- tp3.2上传图片生成缩略图
			//引入 use think\Image; /* * $name为表单上传的name值 * $filePath为为保存在入口文件夹public下面uploads/下面的文件夹名称,没有的话会自动创建 ... 
- XNginx  - nginx 集群可视化管理工具
			之前团队的nginx管理,都是运维同学每次去修改配置文件,然后重启,非常不方便,一直想找一个可以方便管理nginx集群的工具,翻遍web,未寻到可用之物,于是自己设计开发了一个. 效果预览 集群gro ... 
- Flink--将表转换为DataStream或DataSet
			A Table可以转换成a DataStream或DataSet.通过这种方式,可以在Table API或SQL查询的结果上运行自定义的DataStream或DataSet程序 将表转换为DataSt ... 
- Codeforces 633F The Chocolate Spree 树形dp
			The Chocolate Spree 对拍拍了半天才知道哪里写错了.. dp[ i ][ j ][ k ]表示在 i 这棵子树中有 j 条链, 是否有链延伸上来. #include<bits/ ... 
- BigDecimal的引入和概述
			[代码] System.out.println(0.09 + 0.01); System.out.println(0.1 - 0.32); System.out.println(1.015 * 100 ... 
- spring cloud (二、服务注册安全demo_eureka)
			spring cloud (一.服务注册demo_eureka) 加强服务的安全性,我们接下来加上访问的账号密码: 首先需要添加对应的依赖 <!--账号密码认证依赖--> <depe ... 
- Redis数据库 01概述| 五大数据类型
			1.NoSQL数据库简介 解决应用服务器的CPU和内存压力:解决数据库服务的IO压力: ----->>> ① session存在缓存数据库(完全在内存里),速度快且数据结构简单: 打 ... 
- echarts入门
			一直好奇,今晚就学习了一番,算是入门的级别,学习总是一个渐进的过程. 一路记录,一路足迹. 一:学习资料 1.主要参考的代码 https://github.com/shengxinjing/imooc ... 
- 转载:搭建完整的arm-linux-gcc等交叉编译环境(感谢CSDN博主的分享)
			安装环境 Linux版本:Ubuntu 12.04 内核版本:Linux 3.5.0 交叉编译器版本:arm-linux-gcc-4.4.3 这个版本的交叉编译器 安装前的絮叨 首先简单介绍 ... 
