理解ClassLoader双亲委托模型关键
来源:互联网 发布:java读取文本文件内容 编辑:程序博客网 时间:2024/05/17 09:12
看图
- Bootstrap classLoader:采用native code实现,是JVM的一部分,主要加载JVM自身工作需要的类,如java.lang.*、java.uti.*等; 这些类位于$JAVA_HOME/jre/lib/rt.jar。Bootstrap ClassLoader不继承自ClassLoader,因为它不是一个普通的Java类,底层由C++编写,已嵌入到了JVM内核当中,当JVM启动后,Bootstrap ClassLoader也随着启动,负责加载完核心类库后,并构造Extension ClassLoader和App ClassLoader类加载器。
- ExtClassLoader:扩展的class loader,加载位于$JAVA_HOME/jre/lib/ext目录下的扩展jar。
- AppClassLoader:系统class loader,父类是ExtClassLoader,加载$CLASSPATH下的目录和jar;它负责加载应用程序主函数类。
关键1
在一个自定义的classloader A接收到加载类的指令时,首先查看缓存里有没有,没有的话就交给其父亲B(extension classloader)去加载;同理 父亲B接到这个指令时也会先检查缓存里是否已经加载了,如果缓存中没有就去叫它的父亲C(Bootstrap classloader)去找
C说:我给你看一下%JAVA_HOME%/lib下有这个类没,如果还是找不到的话就只有你自己去找了,因为我只能到这个目录下去找哦 亲;
如果C没有找到,B就说还是我到%JAVA_HOME%/lib/ext下去给你找找,我只能访问这个目录哦 亲;
如果B没有找到,就对A说:你要找的类是不是在你的工程lib下哟?如果是的话你就自己去找吧,B说:“我靠 找到了 果然在工程的lib下“
这就是完整的加载类过程;
之前我理解的所有的类都是 bootstarp classloader加载的,这个说法是错的。
关键2
虚拟机判断两个类是否相同类依据:1、全类名是否一致 2、是否由相同类加载器
关键3
JAVA虚拟机不是一下子加载所有工程里的class文件的,而是需要时才会加载,比如 一个类里引用了某个类,或者用了new关键字等
附:
JAVA虚拟机加载class文件步骤
1、装载:查找和导入Class文件
2、链接:其中解析步骤是可以选择的
(a)检查:检查载入的class文件数据的正确性
(b)准备:给类的静态变量分配存储空间
(c)解析:将符号引用转成直接引用
3、初始化:对静态变量,静态代码块执行初始化工作
阅读全文
1 0
- 理解ClassLoader双亲委托模型关键
- JVM类加载-从ClassLoader源码看双亲委托模型
- android classloader双亲委托模式
- ClassLoader以及双亲委托模式
- java双亲委托模式classLoader
- 双亲委托模型
- 【jvm】---classLoader 双亲委派模型
- java ClassLoader类解析-双亲委托机制
- classloader加载的双亲委托模式
- Java ClassLoader及双亲委托模式
- java ClassLoader类解析-双亲委托机制
- ClassLoader双亲委派模型loadClass过程
- ClassLoader的委托模型
- 双亲委派模型的理解
- Redkale 技术详解 01 -- 双亲委托模型
- 深入理解java虚拟机---双亲委派模型
- 类装载器、双亲委托模型、命名空间、安全性
- 类装载器、双亲委托模型、命名空间、安全性
- JavaScript本地对象常用方法(三)——正则表达式对象
- c语言小函数——strcat
- executeUpdate
- Oracle 数据库
- tensorflow_gpu-1.2.1-cp35-cp35m-win_amd64.whl文件怎么安装?
- 理解ClassLoader双亲委托模型关键
- codevs 1215 迷宫
- 魅族bindService return false
- hdu 2813 二分图最大权匹配 非完全匹配
- 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- vmware 安装 kali linux 系统到U盘 启动错误(initramfs:) 修复方法
- 使用ThreadLocal来存储Session(Hibernate中),SqlSession(Mybatis中)
- 内置对象
- Arraylist源码分析