当前位置: 首页 > news >正文

类加载器及双亲委派机制

经过了一段时间的学习,现在又回头来补一下早先的知识了。

类加载器

作用:加载Class文件 -> new Student();

可以从上图看出,那么,这些实例应该都由一个类加载创造,我们也可以通过代码来看

public class Dog {
    public static void main(String[] args) {
        Dog dog1 = new Dog();
        Dog dog2 = new Dog();
        Dog dog3 = new Dog();

        System.out.println(dog1.hashCode());
        System.out.println(dog2.hashCode());
        System.out.println(dog3.hashCode());

        Class<? extends Dog> Class1 = dog1.getClass();
        Class<? extends Dog> Class2 = dog2.getClass();
        Class<? extends Dog> Class3 = dog3.getClass();

        System.out.println(Class1.hashCode());
        System.out.println(Class2.hashCode());
        System.out.println(Class3.hashCode());
    }
}

通过此代码运行的结果可以看出,Class1,Class2,Class3的hashCode一致

那么顺带着两者问题

1.不同的类加载器,除了读取二进制流的动作和范围不一样,后续加载的逻辑是否也不一样?

2.遇到限定名一样的类,这么多的加载器会不会产生混乱?

默认情况下,一个限定名的类只会被一个类加载器加载解析并使用,这样的程序中,他就是唯一的,不会产生歧义的

于是引入了双亲委派机制

当一个类受到加载请求,不会自己去加载,而是会传递给自己的父亲加载器(并非继承关系),这样所有的类都会先传到上层的Bootstrap ClassLoader。只有父亲加载器无法加载,儿子加载器才会尝试自己加载

什么是 无法加载?

根据类的限定名,类没有在自己负责的加载路径中找到该类。

我们此时回答以上两个问题

1.我们认为除了Bootstrap ClassLoader,所有的非Bootstrap ClassLoader都继承了java.lang.ClassLoader,都由这个类的defineClass进行后续处理

2.越核心的类库被越上层的类加载器加载,而某限定名的类一旦被加载过了,被动情况下,就不会再加载相同限定名的类。这样 ,就能够有效避免混乱

http://www.dtcms.com/a/75597.html

相关文章:

  • vscode vue3 jsconfig 与 tsconfig的区别
  • Vue渲染函数 - render 函数
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 的起步依赖:快速构建 JavaWeb 项目
  • vscode记录
  • SQL注入中空格与逗号过滤的绕过技巧总结
  • PHP、Java、Go、Python、Node.js、Ruby 写的接口,服务器承载量对比
  • 爬虫逆向:详细讲述iOS底层原理及机制
  • 健康养生:为生命注入活力
  • k8s基础资源管理指令
  • freeswitch (中继网关呼出配置)
  • VSCode - 查看 PDF 文件
  • 信息学奥赛一本通 1526:Blockade | 洛谷 P3469 [POI 2008] BLO-Blockade
  • 2024年 蓝桥杯 Python A组题目分析与讲解
  • 新造车不再比拼排名,恰是曲终人散时,剩者为王
  • 从PLC到云端:5G嵌入式网关的MQTT协议转换与Ubuntu二次开发全解析
  • 用VSCode做前端开发
  • BFGS学习
  • 第四章:ESP32零基础教学 - 4.1.4MPU6050加速度传感器
  • 电机控制常见面试问题(十五)
  • 103. 水流问题
  • Dify 问题 - RAG Workflow 没有返回知识库引用
  • 为什么渲染农场渲染帧而非视频?核心原因 + 举例
  • 鸿蒙开源硬件:重构万物智联生态的底层基座与未来机遇
  • 单元化架构在字节跳动的落地实践
  • 【第13节】windows sdk编程:GDI编程
  • 从pdf提取文本数据的c/cpp库(非OCR)
  • 应用分层简介
  • 压缩Docker虚拟磁盘空间CMD命令
  • ssm框架之mybatis框架动态SQL
  • Modern C++处理 Hooks 机制