一张图带你了解类加载子系统

 

1.概述

1.1是什么:JVM构成的一部分

1.2用于做什么:负责加载类,校验类,初始化类,构建类的字节码对象

2.类加载器

2.1是什么:类加载子系统中负责将类读取到内存的对象

2.2有哪些类加载器:

        2.2.1 BootStrapClassLoader

        2.2.2 ExtClassLoader

        2.2.3 AppClassLoader

        2.2.4 自定义的类加载器

2.3类加载机制-双亲委派模型:

        优点:可以保证只能被同一个类加载器加载一次,同时保证类体系的健壮性 (例如我们自己写的java.lang.Object类不能被加载)

        缺点:1)可能对效率会多少有一些影响; 2)可能对不同项目中的包名,类名相同的类无法实现正确类加载

3.类的加载方式

3.1显式加载: 直接调用类加载器的方法对类加载即可

3.2隐式加载: 1) 访问类的成员(静态属性或方法)

                     2)构建类的对象(new)

4.类加载过程

4.1 加载

        4.1.1 查找类: 不同类加载器有不同的类加载路径

        4.1.2 读取类: 底层会通过线程调用io将磁盘或网络中的类读到内存中

4.2 连接

        4.2.1 校验: 校验类结构信息的合法性

        4.2.2 准备: 对类变量进行默认初始化

        4.2.3 解析: 对一些符号引用转换为直接引用:例如访问常量池中的哪个常量,调用哪个类中的哪个方法

4.3 初始化类

1) 对类变量进行初始化赋值(例如static int a =10,准备阶段是0,初始化阶段是10)

2)执行类的静态代码块

        4.3.1 主动使用: 被动使用是不会初始化类的

        4.3.2 被动使用

5.自定义类加载器

5.1 为什么:默认的类加载器不满足我们的需求了

5.2 如何自定义: 直接或间接继承ClassLoader类并重写相关方法

猜你喜欢

转载自blog.csdn.net/weixin_72125569/article/details/126861138