当前位置:网站首页>【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协议。
边栏推荐
猜你喜欢
随机推荐
数据库上机实验6 数据库完整性
利用phpstudy搭建DVWA
leetcode-每日一题731. 我的日程安排表 II
联盟链的真实场景在哪里
Flink sink redis writes to Redis
Object,多态 1(第八天)
对递归的一些感悟
1D, 2D, 3D convolution operations in pytorch
If the account number or password is entered incorrectly for many times, the account will be banned.
C语言教程(三)-if和循环
初涉C语言
Sword Point Offer Special Assault Edition ---- Day 1
vulhub靶场学习日记SickOs1.2
SQL注入中数据库的判断
Flask-based three-party login process
C语言实验三 选择结构程序设计
关于superset集成到自己的项目中
PAT_乙级_真题练习_1007_素数对猜想
Memcached :安装
账号或密码多次输入错误,进行账号封禁









