当前位置:   article > 正文

Java 的类加载过程_java加载类实在什么加载

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版 周志明

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/291201
推荐阅读
相关标签
  

闽ICP备14008679号