当前位置:网站首页>【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协议。
边栏推荐
猜你喜欢
剑指offer专项突击版 ---第 5 天
05 【绑定样式 条件渲染 列表渲染】
剑指offer基础版 ----- 第28天
Redis 事务学习有感
详解扫雷游戏(C语言)
The process and specific code of sending SMS verification code using flask framework
剑指offer基础版 --- 第22天
If the account number or password is entered incorrectly for many times, the account will be banned.
Anaconda configure environment directives
gin框架学习-Casbin进阶之策略管理API使用方法
随机推荐
leetcode-每日一题735. 行星碰撞(栈模拟)
初涉C语言
数据库上机实验2 单表查询和嵌套查询
Sword Point Offer Special Assault Edition ---- Day 2
Flask 的初识
Flink sink redis writes to Redis
剑指offer专项突击版 ---- 第 6 天
GUCCI、LV等奢侈品巨头如何布局元宇宙的,其他品牌应该跟上吗?
剑指offer基础版 --- 第22天
剑指offer基础版--- 第23天
leetcode-每日一题1217. 玩筹码(贪心+位运算)
Kubernetes加入集群的TOKEN值过期
Anaconda configure environment directives
Access数据库的查询
12 【网页布局总结 元素的显示与隐藏】
Interviewer, don't ask me to shake hands three times and wave four times again
gin框架学习-JWT认证
C语言的文件操作(一)
Redis:简单实用
运用flask框架发送短信验证码的流程及具体代码