类加载器

本文深入探讨了Java的类加载机制,包括class文件分析、符号引用与直接引用的区别、双亲委派机制的源码解析,以及自定义类加载器的重要性。文章详细介绍了类加载的各个阶段,如启动类加载器、扩展类加载器和应用程序类加载器的职责,并提到了类加载过程中的魔数概念。同时,文章还讨论了javap工具在类文件结构分析中的作用。
摘要由CSDN通过智能技术生成

1、class文件分析

https://zhuanlan.zhihu.com/p/81400366

2、符号引用,直接引用

https://blog.csdn.net/luzhensmart/article/details/82627897?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可,使用符号引用时,被引用的目标不一定已经加载到内存中。

直接引用可以是直接指向目标的指针,相对偏移量,一个能间接定位到目标的句柄,使用直接引用时,引用的目标必定已经存在于虚拟机的内存中了。

为什么在解析阶段要符号引用转直接引用?

个人理解,如果使用符号引用,虚拟机其实也不知道具体引用的类的内存地址,那么也就无法真正的调用到该类,所以要把符号引用转为直接引用,这样就能够真正定位到类在内存中的地址,如果符号引用转直接引用失败,就说明类还没有被加载到内存中,就会报错。

3、图形拓展

 

4、双亲委派机制(含源码解析)

https://lisam.blog.csdn.net/article/details/85042696?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control

https://blog.csdn.net/codeyanbao/article/details/82875064

 

5、为什么还需要自定义类加载器??

1 从非标准来源加载代码:由于系统提供的类加载器均加载的是指定目录,所以当我们需要加载非系统指定目录如C:/xx/xxxx.class时需要自定义类加载器、数据库、云端等。

2 加密:将编译后的代码加密,然后用自定义类加载器去先解密,然后再加载。

6、类加载器的分类

  • 启动类加载器(Bootstrap ClassLoader): 负责将存放在 <JAVA_HOME>\lib 目录中的,并 且能被虚拟机识别的(仅按照文件名识别,如 rt.jar,名字不符合的类库即使放在 lib 目录中 也不会被加载)类库加载到虚拟机内存中。

  • 扩展类加载器(Extension ClassLoader): 负责加载 <JAVA_HOME>\lib\ext 目录中的所有 类库,开发者可以直接使用扩展类加载器。

  • 应用程序类加载器(Application ClassLoader): 由于这个类加载器是 ClassLoader 中的 getSystemClassLoader() 方法的返回值,所以一般也称它为“系统类加载器”。它负责加载用 户类路径(classpath)上所指定的类库,开发者可以直接使用这个类加载器,如果应用程 序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。

 

7、类加载过程

 

8、class文件结构

 

9、什么是魔数?

在计算机领域,魔数有两个含义,一指用来判断文件类型的魔数;二指程序代码中的魔数,也称魔法值。

10、类加载器的作用?

https://blog.csdn.net/studyvcmfc/article/details/7720322

11、javap

https://blog.csdn.net/weixin_44082567/article/details/86081531

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elsa~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值