千家信息网

什么是JVM的类加载机制

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"什么是JVM的类加载机制",在日常操作中,相信很多人在什么是JVM的类加载机制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"什么是JVM的类加载机制"
千家信息网最后更新 2026年11月03日什么是JVM的类加载机制

这篇文章主要介绍"什么是JVM的类加载机制",在日常操作中,相信很多人在什么是JVM的类加载机制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"什么是JVM的类加载机制"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

JVM中类的生命周期包括7个阶段,加载、准备、验证、解析、初始化、使用、卸载。其中准备、验证、解析被归为连接阶段。

加载

jvm在这个阶段完成的工作

  • 通过类名获取类的二进制字节流

  • 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构

  • 在堆中生成一个代表该类的java.lang.class对象,作为访问类在方法区中数据的入口

在这个阶段开发者可以控制二进制字节流的获取,也就是可以通过自定义的类加载器做自己定制化的操作。

验证

顾名思义,验证被加载的类的正确性。

  • 文件格式验证:验证字节流是否符合Class文件格式的规范;例如:是否以 0xCAFEBABE开头

  • 元数据验证:对字节码描述的信息进行语义分析,以保证其描述的信息符合Java语言规范的要求

  • 字节码验证:通过数据流和控制流分析,确定程序语义是合法的、符合逻辑的。

  • 符号引用验证:确保解析动作能正确执行

准备

为类的 静态变量分配内存,并将其初始化为默认值

  • 只分配静态变量内存

  • 初始化默认值是类型的默认值(即int:0、boolean:false...),不是代码显示设置的初始值

  • 如果是final static修饰的变量则会赋值为代码中的初始值(即:final static int val=3,这时val赋值为3,而不是0)

解析

把类中的符号引用转换为直接引用符号引用就是一组符号来描述目标(例如:ArrayList)。直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。

初始化

类变量的初始化

  • 定义类变量时初始化

  • 静态代码块初始化

触发类初始化的场景

  • 创建类实例,即new对象

  • 访问静态变量

  • 访问静态方法

  • 反射调用(即Class.forName("com.xxx.Obj"),Obj类被初始化)

  • 子类被初始化则父类被初始化

类加载器

  • 启动类加载器(BootStrap ClassLoader):负责加载jrelib下或者-Xbootclasspath 参数指定的路径下的能被jvm识别的类库。开发者无法直接使用

  • 拓展类加载器(Extension ClassLoader):sun.misc.Launcher$ExtClassLoader,它负责加载 jrelibext目录中,或者由 java.ext.dirs系统变量指定的路径中的所有类库。开发者可以直接使用。

  • 应用类加载器(Application ClassLoader):sun.misc.Launcher$AppClassLoader,它负责加载用户类路径(ClassPath)所指定的类。开发者可以直接使用

  • 自定义类加载器(Custom ClassLoader):用户可以自定义类加载器

双亲委派模型

image.png

双亲委派模型的实现,当一个类加载器需要加载类时,会把这个任务委派给父级类加载器,依次向上,倒顶层启动类加载器为止,如果父级无法加载,再自己处理加载。双亲委派模型的好处是,保证同一类环境中只有一个相同的类。也就是说JVM中判断是否是同一个类的条件是,是否相同的类加载器,类本身相同。代码示例:

public class ClassLoaderTest {    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {        // 使用ClassLoaderTest的类加载器加载本类        Object obj1 = ClassLoaderTest.class.getClassLoader().loadClass("com.ognice.ClassLoaderTest").newInstance();        System.out.println(obj1.getClass().getClassLoader());        System.out.println(obj1 instanceof ClassLoaderTest);        // 使用自定义类加载器加载本类        ClassLoader customClassLoader = new ClassLoader() {            @Override            public Class loadClass(String name) throws ClassNotFoundException {                System.out.println("custom classloader loading " + name);                String fileName = name.substring(name.lastIndexOf(".") + 1) + ".class";                InputStream stream = getClass().getResourceAsStream(fileName);                if (stream == null) {                    return super.loadClass(name);                }                try {                    byte[] b = new byte[stream.available()];                    stream.read(b);                    return defineClass(name, b, 0, b.length);                } catch (IOException e) {                    e.printStackTrace();                }                // 父级找class                return super.loadClass(name);            }        };        Object obj2 = customClassLoader.loadClass("com.ognice.ClassLoaderTest").newInstance();        System.out.println(obj2.getClass().getClassLoader());        System.out.println(obj2 instanceof ClassLoaderTest);    }}

执行结果

sun.misc.Launcher$AppClassLoader@18b4aac2truecustom classloader loading com.ognice.ClassLoaderTestcustom classloader loading java.lang.Objectcustom classloader loading java.lang.ClassLoadercustom classloader loading com.ognice.ClassLoaderTest$1com.ognice.ClassLoaderTest$1@277c0f21false

到此,关于"什么是JVM的类加载机制"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

验证 变量 静态 机制 代码 开发者 数据 方法 符号 阶段 委派 学习 开发 相同 双亲 模型 目标 路径 准备 也就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州百单互联网科技有限公司 金融科技还是互联网 工业互联网科技新基建 互联网 科技 长亮科技互联网金融 深圳卡尔迅互联网科技有限公司怎么样 恒生科技互联网指数分析 玖二柒互联网科技公司待遇 北京华百购互联网科技有限公司 港股科技和互联网 陕西云淼互联网科技公司 下一代互联网重大应用科技园 昆明中奇联合互联网科技 科技互联网行业投资研究 容联科技互联网电商 互联网科技品牌 黑龙江互联网科技公司 网互联网络科技 宁波允成互联网科技有限公司 伍佰万互联网科技是干嘛的 小米移动互联网科技园 互联网科技工作委员会副主任毛军 致骋互联网科技 撒么互联网科技公司 互联网企业和科技型企业 来此购互联网科技有限公司 崇明区互联网教育科技售后服务 启辰互联网科技 科技和互联网行业的特点 数字科技和互联网金融哪个好
0