Java类加载的过程

Java的类加载涉及加载、链接、验证、准备、解析和初始化等步骤,其中链接过程包括验证、准备和解析。类加载器如BootstrapClassLoader、ExtensionClassLoader和ApplicationClassLoader各自负责不同范围的类加载,采用双亲委派机制确保安全性和避免类的重复加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java类加载的过程

JVM把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终变成可以被JVM直接使用的Java类型
(因为可以动态产生,这里的Class文件并不是具体存在磁盘中的文件,而是二进制数据流)

  1. 加载(Loading)
  2. 链接(Linking)
    - 验证 --确保字节码文件的格式正确,运行时不会危害虚拟机的安全
    验证
    - 准备 --主要为类的静态资源变量分配内存,并将其初始化为默认值
    – 如果类静态变量的字段属性中存在ConstantVallue属性,则直接执行赋值语句
    - 类静态变量为基本数据类型被final修饰
    - 类静态变量为String类型被final修饰,并且以自面量的形式赋值
    - 解析 --将类,接口,字段和方法的符号引用转为直接引用
  3. 初始化(Initialization)–执行类静态成员变量赋值语句和静态代码块中的语句
    在这里插入图片描述
  4. 使用(Using)
  5. 卸载(Unloading)

类加载的过程中双亲委派机制

原理:

  1. Java运行必须经过编译和类加载
  2. 编译就是将java文件变成字节码文件,类加载过程就是将字节码文件加载到JVM内存里面,装载完成会得到一个class对象,可以使用new关键字来实例化这个对象
  3. JVM在运行的时候会产生三个类加载器,组成层级关系,每一个类加载器分别加载不同作用范围的Jar包
  4. 类加载器分类
    1. 启动类加载器(Bootstrap ClassLoader) ==》负责Java核心类库的加载(%JAVA_HOME%\lib下的jar包)
    2. 扩展类加载器(Extension ClassLoader) ==》负责%JAVA_HOME%\lib\ext下的jar包和class文件
    3. 应用类加载器(Application ClassLoader)==》当前应用里面classpath下面的所有jar包和类文件
    4. 自定义类加载器(User ClassLoader) ==》满足特殊的场景需求

好处:

  • 提高安全性,所有的类都会给到父类加载器,每个类加载器的本身有自己的作用范围,避免对核心类库的破坏
  • 避免重复加载导致程序混乱,父类加载过的文件子类就不必再去加载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值