当前位置:网站首页>【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进阶之样式框架/生产环境【day10】
sqlmap注入教程 常用指令
C语言实验一 熟悉C程序的环境
About integrating superset into your own project
第7章 网络层第3次练习题答案(第三版)
数据库上机实验6 数据库完整性
C语言实验四 循环结构程序设计(一)
Simple command of mysql
初识正则表达式
vulhub靶场学习日记SickOs1.2
04 【计算属性 侦听属性】
运用flask框架发送短信验证码的流程及具体代码
C语言指针详解
数据库学习笔记
“档次法”——用于物品体积分布不均匀的01背包问题的求解方法
剑指offer专项突击版 ---- 第 6 天
剑指offer基础版 --- 第22天
Three-party login using wallet Metamask based on web3.0
tf.keras.utils.get_file()
03 【数据代理 事件处理】








