Java虚拟机之Java类型的生命周期
2023-12-08 12:16:08
Java虚拟机之Java类型的生命周期
在上一篇中,我们简单地记录了Java class文件的格式,它以标准的二进制形式来表现Java类型。本篇我们来看下当二进制的类型数据被导入到和Java虚拟机中时,到底会发生什么。我们以一个Java类型(类或接口)的生命周期(从进入虚拟机开始到最终退出)为例来讨论开始阶段的装载、连接和初始化。
Java虚拟机中类型的生命周期可以划分为以下三个阶段:
- 装载 :这一步将Java class文件的二进制数据读入到Java虚拟机中,并将其存储在内存中。
- 连接 :这一步将装载的二进制数据转换为Java虚拟机可以执行的格式,并将其与其他类型(如父类或接口)关联起来。
- 初始化 :这一步对类型进行初始化,包括分配内存、设置默认值、调用构造函数等。
装载
装载是Java类型生命周期的第一个阶段。这一步将Java class文件的二进制数据读入到Java虚拟机中,并将其存储在内存中。Java虚拟机的类加载器负责执行这一步。类加载器可以是内置的,也可以是用户自定义的。
连接
连接是Java类型生命周期的第二个阶段。这一步将装载的二进制数据转换为Java虚拟机可以执行的格式,并将其与其他类型(如父类或接口)关联起来。连接过程分为三个步骤:
- 验证 :这一步检查Java class文件是否符合Java虚拟机的规范。
- 准备 :这一步分配内存空间并设置默认值。
- 解析 :这一步将符号引用转换为直接引用。
初始化
初始化是Java类型生命周期的第三个阶段。这一步对类型进行初始化,包括分配内存、设置默认值、调用构造函数等。初始化过程分为两个步骤:
- 静态初始化 :这一步初始化类型的静态变量和静态代码块。
- 实例初始化 :这一步初始化类型的实例变量和实例代码块。
当一个Java类型被初始化后,它就可以被Java虚拟机执行了。Java虚拟机通过执行字节码来执行Java类型。字节码是Java编译器将Java源代码编译成的一种中间代码。
Java类型生命周期的结束
当一个Java类型不再被使用时,它就会被Java虚拟机回收。Java虚拟机回收Java类型的方式有两种:
- 主动回收 :Java虚拟机通过调用finalizer方法来主动回收Java类型。
- 被动回收 :Java虚拟机通过垃圾回收器来被动回收Java类型。
总结
Java类型在Java虚拟机中的生命周期分为装载、连接和初始化三个阶段。装载阶段将Java class文件的二进制数据读入到Java虚拟机中。连接阶段将装载的二进制数据转换为Java虚拟机可以执行的格式,并将其与其他类型关联起来。初始化阶段对类型进行初始化,包括分配内存、设置默认值、调用构造函数等。当一个Java类型不再被使用时,它就会被Java虚拟机回收。