当前位置:网站首页>类加载器简介
类加载器简介
2022-07-21 17:40:00 【文丑颜不良啊】
之前我们说过,java 代码被编译成 .class 字节码文件之后,是需要被加载到 JVM 中的,负责把各种 .class 的文件加载到 JVM 中的东西就叫做类加载器。
类加载器分类
jdk 提供的类加载器有三种,每个类加载器只能加载某个路径下的内容
启动类加载器:Bootstrap ClassLoader。加载的是 jre/lib/rt.jar 文件。
扩展类加载器:Extension ClassLoader。加载的是 jre/lib/ext 下的文件。
应用类加载器:Application ClassLoader。加载的是 classpath 路径下的所有 class 文件。
类加载机制--双亲委派
双亲委派机制可以理解为类加载器之间的一种互相协作的工作模式。
如果我们需要加载某个类(比如说代码中写了 Demo nemo = new Demo(),那就需要去加载 Demo 类了),具体过程是这样的:
1.先让应用类加载器在自己的缓存里找,如果找到了,直接返回,如果没找到,就交给扩展类加载器去找。
2.如果应用类加载器没有找到,就该扩展类加载器找了。扩展类加载器同样也先会在自己的缓存里找,如果能找到,直接返回,如果没找到,就让启动类加载器找。
3.如果扩展类加载器没有找到,就该启动类加载器找了。启动类加载器同样也先会在自己的缓存里找,如果能找到,直接返回,如果没找到,就到自己负责的路径(jre/lib/rt.jar)下去找,找到了就返回,找不到就原路返回让扩展类加载器继续去找。
4.扩展类加载器接下来会在自己负责的路径下(jre/lib/ext/*.jar)去找,如果找不到,就重新交给应用类加载器。
5. 应用类加载器会在 classpath 路径下找,如果找不到,就抛 ClassNotFound 异常。
为什么要用双亲委派
因为安全。如果我们自己定义一个和 jdk 中的 String 类一模一样的一个新的 String 类,如果该类直接被应用类加载器加载到内存中的话,就是一件很危险的事,因为这意味着我们可以通过这种方式去替代 jdk 原本的 String 类。
边栏推荐
- [Samsung 6818] GPIO analog SPI signal writing access card identification module driver
- 并发编程-----------集合
- 一种图片选择自定义控件
- Writing of Samsung 6818led driver
- Grep, egrep, fgrep character matching
- leetcode_两数相加_个人解法
- 中信建投开户是安全吗?可以直接进行开户办理吗??
- Typo in static class property declarationeslint
- Login shell and non login shell
- Module build failed: Error: Plugin/Preset files are not allowed to export objects, only functions.
猜你喜欢
QML drag pictures and objects across windows
Advanced pointer depth "six" (two-dimensional array related knowledge)
海思[Hi3531]onvif协议实现基于gsoap和openssl_代码篇
Qml-跨窗口拖动图片、物体
Hisilicon hi3531 | Ruixin micro rk1109 realizes H264 streaming with RTSP client
ES版i9-13900K亮相CPU-Z数据库 跑分数据过于谦虚
Machine learning by Li Hongyi 5 Tips for neural network design
刨根问底丨落后的技术,能否造出好卖的产品?
一种图片选择自定义控件
serialization and deserialization
随机推荐
【OAuth2】二、OAuth2.1的已知变动
Grep, egrep, fgrep character matching
A method of keeping the original scale of OpenGL map
Visual Studio的intellisense: '没有可用的成员'
Error: a connection was successfully established with the server, but
使用style解决异形屏横屏时的白色边框
Typo in static class property declarationeslint
win7下在安装Oracle10g时出现【安装检测到系统的主 IP 地址是 DHCP 分配的地址】的错误的解决办法
文件查找命令
C语言——三种方式实现学生信息管理
MMDrawerController 获取当前VC进行Push和Pop
OSPF 重发布
Hisilicon hi3531 | Ruixin micro rk1109 realizes H264 streaming with RTSP client
[compilation record of Ruixin micro rk1109_rk1126 rkmedia]
OSPF的路由控制
登录式shell和非登录式shell
Postman configures the global variable postman sets the global token
RT-Thread中常用的指令
mysql
TypeError: 'str' object does not support item assignment