类的生命周期类加载过程详解 - 图2

类加载过程

类加载过程详解 - 图3
类加载过程的第一步,主要完成下面 3 件事情:

  1. 通过全类名获取定义此类的二进制字节流
  2. 将字节流所代表的静态存储结构转换为方法区的运行时数据结构
  3. 在内存中生成一个代表该类的 Class 对象,作为方法区这些数据的访问入口

    验证

    验证阶段.png

    准备

    准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些内存都将在方法区中分配。


    解析

    解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,也就是得到类或者字段、方法在内存中的指针或者偏移量。

    初始化

    初始化阶段是执行初始化方法 ()方法的过程,是类加载的最后一步,这一步 JVM 才开始真正执行类中定义的 Java 程序代码(字节码)。

    卸载

    卸载类需要满足 3 个要求:

  4. 该类的所有的实例对象都已被 GC,也就是说堆不存在该类的实例对象。

  5. 该类没有在其他任何地方被引用
  6. 该类的类加载器的实例已被 GC