返回

Java虚拟机之Java类型的生命周期

见解分享

Java虚拟机之Java类型的生命周期

在上一篇中,我们简单地记录了Java class文件的格式,它以标准的二进制形式来表现Java类型。本篇我们来看下当二进制的类型数据被导入到和Java虚拟机中时,到底会发生什么。我们以一个Java类型(类或接口)的生命周期(从进入虚拟机开始到最终退出)为例来讨论开始阶段的装载、连接和初始化。

Java虚拟机中类型的生命周期可以划分为以下三个阶段:

  1. 装载 :这一步将Java class文件的二进制数据读入到Java虚拟机中,并将其存储在内存中。
  2. 连接 :这一步将装载的二进制数据转换为Java虚拟机可以执行的格式,并将其与其他类型(如父类或接口)关联起来。
  3. 初始化 :这一步对类型进行初始化,包括分配内存、设置默认值、调用构造函数等。

装载

装载是Java类型生命周期的第一个阶段。这一步将Java class文件的二进制数据读入到Java虚拟机中,并将其存储在内存中。Java虚拟机的类加载器负责执行这一步。类加载器可以是内置的,也可以是用户自定义的。

连接

连接是Java类型生命周期的第二个阶段。这一步将装载的二进制数据转换为Java虚拟机可以执行的格式,并将其与其他类型(如父类或接口)关联起来。连接过程分为三个步骤:

  1. 验证 :这一步检查Java class文件是否符合Java虚拟机的规范。
  2. 准备 :这一步分配内存空间并设置默认值。
  3. 解析 :这一步将符号引用转换为直接引用。

初始化

初始化是Java类型生命周期的第三个阶段。这一步对类型进行初始化,包括分配内存、设置默认值、调用构造函数等。初始化过程分为两个步骤:

  1. 静态初始化 :这一步初始化类型的静态变量和静态代码块。
  2. 实例初始化 :这一步初始化类型的实例变量和实例代码块。

当一个Java类型被初始化后,它就可以被Java虚拟机执行了。Java虚拟机通过执行字节码来执行Java类型。字节码是Java编译器将Java源代码编译成的一种中间代码。

Java类型生命周期的结束

当一个Java类型不再被使用时,它就会被Java虚拟机回收。Java虚拟机回收Java类型的方式有两种:

  1. 主动回收 :Java虚拟机通过调用finalizer方法来主动回收Java类型。
  2. 被动回收 :Java虚拟机通过垃圾回收器来被动回收Java类型。

总结

Java类型在Java虚拟机中的生命周期分为装载、连接和初始化三个阶段。装载阶段将Java class文件的二进制数据读入到Java虚拟机中。连接阶段将装载的二进制数据转换为Java虚拟机可以执行的格式,并将其与其他类型关联起来。初始化阶段对类型进行初始化,包括分配内存、设置默认值、调用构造函数等。当一个Java类型不再被使用时,它就会被Java虚拟机回收。