返回

揭秘类加载的5个步骤:JVM的灵魂深处!

Android

前言:类加载的必要性

Java程序的运行依赖于Java虚拟机(JVM),JVM通过解释执行字节码来运行程序。字节码是Java编译器将Java源代码编译成的一种中间代码,它可以被JVM理解和执行。为了使Java程序能够正确运行,需要将字节码加载到内存中,这个过程就称为类加载。

类加载的五个步骤

类加载是一个复杂的过程,涉及到多个步骤。这些步骤包括:

  1. 加载 :加载阶段负责将字节码从Class文件中加载到内存中。
  2. 验证 :验证阶段负责检查字节码是否符合Java虚拟机规范。
  3. 准备 :准备阶段负责为类分配内存并设置默认值。
  4. 解析 :解析阶段负责将类中的符号引用转换为直接引用。
  5. 初始化 :初始化阶段负责执行类的静态代码块和构造函数。

类加载的细节

  1. 加载阶段 :加载阶段由类加载器负责。类加载器是一种负责加载类的软件组件。Java虚拟机中提供了三种默认的类加载器:

    • 启动类加载器:启动类加载器负责加载核心库中的类,这些类位于java.home/lib目录下。
    • 扩展类加载器:扩展类加载器负责加载扩展库中的类,这些类位于java.home/jre/lib/ext目录下。
    • 系统类加载器:系统类加载器负责加载用户指定的路径中的类。
  2. 验证阶段 :验证阶段由Java虚拟机负责。Java虚拟机对字节码进行验证,以确保其符合Java虚拟机规范。验证阶段包括以下几个步骤:

    • 文件格式验证:检查字节码文件是否符合Java虚拟机规范规定的文件格式。
    • 语义验证:检查字节码是否符合Java虚拟机规范规定的语义规则。
    • 字节码验证:检查字节码是否符合Java虚拟机规范规定的字节码操作码规则。
  3. 准备阶段 :准备阶段由Java虚拟机负责。Java虚拟机为类分配内存并设置默认值。准备阶段包括以下几个步骤:

    • 分配内存:为类及其成员分配内存空间。
    • 设置默认值:为类的静态变量和实例变量设置默认值。
  4. 解析阶段 :解析阶段由Java虚拟机负责。Java虚拟机将类中的符号引用转换为直接引用。符号引用是指通过符号名称来引用类、方法或字段。直接引用是指通过内存地址来引用类、方法或字段。解析阶段包括以下几个步骤:

    • 符号解析:将类中的符号引用转换为直接引用。
    • 字段解析:将类中的字段符号引用转换为直接引用。
    • 方法解析:将类中的方法符号引用转换为直接引用。
  5. 初始化阶段 :初始化阶段由Java虚拟机负责。Java虚拟机执行类的静态代码块和构造函数。静态代码块是类加载时自动执行的代码块。构造函数是类实例化时自动执行的代码块。

结语

类加载是Java虚拟机运行Java程序的关键过程之一。类加载过程的五个步骤包括:加载、验证、准备、解析和初始化。通过了解类加载过程,可以更好地理解Java虚拟机的工作原理。