18 类加载机制

vvEcho 2026-03-14 19:36:59
Categories: Tags:

Java 类加载机制是 JVM 在运行时把 .class 文件加载到内存并转换成可运行结构的过程
重点 加载过程 + 类加载器 + 双亲委派机制

类加载的过程

加载 (Loading) — 这一步jvm根据类加载器找到对应的class,将class文件读取为字节数组,并在方法区生成类的信息(类的元数据,字段信息,方法信息,常量池);并在堆中创建class对象

验证 (Verification) — 这一步jvm检查class文件的正确性,比如方法签名、字段类型、继承关系等

准备 (Preparation) — 为类变量分配内存并设置默认值

解析 (Resolution) — 符号引用转换为直接引用,例如将引入转为内存地址

初始化 (Initialization) — 从上到下初始化类,构造器,静态全局变量,静态代码块

使用 (Using) — 在类被new或注入是才会使用

卸载 (Unloading) — 一般而言类不会被卸载

类加载器

Bootstrap ClassLoader(启动类加载器) :主要负责加载Java核心类库,%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。

Extention ClassLoader(扩展类加载器):主要负责加载目录%JRE_HOME%\lib\ext目录下的jar包和class文件。

Application ClassLoader(应用程序类加载器) :主要负责加载当前应用的classpath下的所有类

双亲委派机制

原则是:
先让父类加载
父类加载不了
再自己加载

原因是为了防止核心的类被篡改,例如原生的String类,如果有人想定义同路径同名的类,如果没有双亲委派:程序可能加载恶意String
双亲委派机制的好处是:避免重复类的创建,用到的时候再去加载,同一个类只被加载一次