Java 的类加载过程

JVM中类的装载由类的加载器和它的子类来实现。Java中类加载器负责在运行时查找和装入类文件中的类。由于Java的跨平台性,经过编译的 Java源程序并不是一个可执行程序,而是一个或多个类文件。一般来说, Java 的类加载过程分为三个主要步骤:加载,连接,初始化,

加载(Loading)

类的加载是指把类的字节码文件数据读入到内存中,通常是创建一个字节流读入字节码文件,然后在堆中产生与所加载类对应的Class对象。字节码数据源可以是 jar 文件、class 文件、网络数据源等。

连接(Linking)

把原始的类定义信息平滑地转入 JVM 运行的过程中,可以细分成三个步骤:

  1. 验证:目的是确保Class文件的字节流中包含的信息符合JVM约束要求。验证阶段会完成的检验动作:

    • 文件格式验证(验证字节流是否符合Class文件规范)
    • 元数据验证(对类的元数据信息进行语义校验)
    • 字节码验证(通过数据流分析和控制流分析,确定程序语义是否符合语法)
    • 符号引用验证(类自身以外的各类信息进行匹配性校验)
  2. 准备:为静态变量分配内存并设置默认初始值。

    (PS: 1.进行内存分配仅包括类变量,而不包括实例变量; 2.初始值一般是数据类型的零值)

  3. 解析:在这一步会将常量池中的符号引用替换为直接引用。解析主要针对类或接口,方法、字段等进行解析。

初始化阶段(initialization)

这一步才真正去执行类中编写的程序代码,对类进行初始化,包括:

1.如果类存在直接父类且未初始化,那么就先初始化父类;

2.如果类中存在初始化语句,则依次执行这些初始化语句。(类变量赋值动作及静态代码块初始化)

参考:《深入理解Java虚拟机》第3版 周志明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值