当前位置:网站首页>【JVM加载】---类加载机制
【JVM加载】---类加载机制
2022-07-31 05:10:00 【火腿编程】
为什么要设计双亲委派模型?
- 沙箱安全机制:防止核心API库被随意篡改
- 避免类的重复加载:当父亲已经加载了该类时,就没有必要让子classloader再加载一次,保证被加载类的唯一性
类加载机制
1.加载
2.验证【文件格式的正确性】
3.准备【类的静态变量内存,并且赋值为0】
4.解析【静态方法链接,将符号引用转换为直接引用】
5.初始化:对类的静态变量初始化为指定的值,执行静态代码块
双亲委派模型
启动类加载器,拓展类加载器,应用程序类加载器,自定义加载器【继承loadClass,重写findClass】
启动类加载器(Bootstrap ClassLoader):这个类加载器复杂将存放在 JAVA_HOME/lib 目录中的,或者被-Xbootclasspath 参数所指定的路径种的,并且是虚拟机识别的(仅按照文件名识别,如rt.jar,名字不符合的类库即使放在lib目录下也不会重载)
扩展类加载器(Extension ClassLoader):这个类加载器由sun.misc.Launcher$ExtClassLoader实现,它负责夹杂JAVA_HOME/lib/ext 目录下的,或者被java.ext.dirs 系统变量所指定的路径种的所有类库。开发者可以直接使用扩展类加载器。
应用程序类加载器(Application ClassLoader):这个类加载器由sun.misc.Launcher$AppClassLoader 实现。由于这个类加载器是ClassLoader 种的getSystemClassLoader方法的返回值,所以也成为系统类加载器。它负责加载用户类路径(ClassPath)上所指定的类库。开发者可以直接使用这个类加载器,如果应用中没有定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器

为什么要打破双亲委派模型?
- 有效解决项目中的包冲突,同时引入相同的类,但是jar包不一样,可以实现相互引入但是没有异常。经典代表就是tomcat和SPI协议。
边栏推荐
猜你喜欢

uni-app进阶之创建组件/原生渲染【day9】

13 【代理配置 插槽】

gin框架学习-JWT认证

Qt Creator + CMake 运行调试总会自动 build 所有目标

剑指offer基础版 ---- 第27天

什么是 GameFi?

永恒之蓝漏洞复现

Sword Point Offer Special Assault Edition ---- Day 1

C语言实验三 选择结构程序设计

The interviewer asked me how to divide the database and the table?Fortunately, I summed up a set of eight-part essays
随机推荐
C语言如何分辨大小端
PAT_乙级_真题练习_1007_素数对猜想
uni-app进阶之创建组件/原生渲染【day9】
数据库上机实验5 数据库安全性
gin框架学习-Casbin进阶之策略管理API使用方法
gin框架学习-JWT认证
剑指offer专项突击版 ---- 第2天
剑指offer专项突击版 ---- 第 6 天
C语言实验一 熟悉C程序的环境
torch.normal函数用法
sqlmap注入教程 常用指令
Anaconda配置环境指令
Flink sink redis writes to Redis
继承、Super,重写、抽象类、抽象方法 1(第七天)
剑指offer专项突击版 ---第 5 天
目标检测学习笔记
uni-app进阶之生命周期【day8】
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法
Sword Point Offer Special Assault Edition ---- Day 2
利用phpstudy搭建DVWA