类加载的过程

类加载是Java虚拟机(JVM)在运行时加载字节码的过程。这个过程包括类的加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)和初始化(Initialization)五个阶段。

  1. 加载(Loading):

    • 从本地文件系统、网络或其他来源读取二进制字节流代表的Java类文件,然后将这个字节流转换为JVM可以识别的类对象(Class对象)。这个过程由类加载器(ClassLoader)负责完成。
  2. 验证(Verification):

    • 确保加载的类信息符合Java虚拟机规范,没有安全方面的问题。例如,检查类文件的魔数、主版本号和次版本号、常量池的有效性等。
  3. 准备(Preparation):

    • 为类变量(静态变量)分配内存,并设置默认初始值。注意,这里的初始值并不是我们编写的代码中设定的值,而是Java语言规定的默认初始值。例如,int类型的变量默认值为0,boolean类型的变量默认值为false。
  4. 解析(Resolution):

    • 将符号引用替换为直接引用。符号引用是对类、接口、字段、方法等实体的抽象表示,直接引用则是指内存地址。解析过程是在类的生命周期中首次遇到对类的主动使用时才会触发。
  5. 初始化(Initialization):

    • 执行类构造器()方法的过程,这个方法由编译器自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。在准备阶段设置的默认初始值在此阶段可能会被修改。类初始化是线程安全的,而且只会被执行一次。

需要注意的是,类加载过程中的类加载器、验证、准备和解析这几个阶段是交叉进行的,而不是严格按照顺序执行。而初始化阶段则必须等到前面四个阶段都完成后才能开始。

你可能感兴趣的:(jvm)