返回
揭秘类加载的5个步骤:JVM的灵魂深处!
Android
2023-09-20 23:41:01
前言:类加载的必要性
Java程序的运行依赖于Java虚拟机(JVM),JVM通过解释执行字节码来运行程序。字节码是Java编译器将Java源代码编译成的一种中间代码,它可以被JVM理解和执行。为了使Java程序能够正确运行,需要将字节码加载到内存中,这个过程就称为类加载。
类加载的五个步骤
类加载是一个复杂的过程,涉及到多个步骤。这些步骤包括:
- 加载 :加载阶段负责将字节码从Class文件中加载到内存中。
- 验证 :验证阶段负责检查字节码是否符合Java虚拟机规范。
- 准备 :准备阶段负责为类分配内存并设置默认值。
- 解析 :解析阶段负责将类中的符号引用转换为直接引用。
- 初始化 :初始化阶段负责执行类的静态代码块和构造函数。
类加载的细节
-
加载阶段 :加载阶段由类加载器负责。类加载器是一种负责加载类的软件组件。Java虚拟机中提供了三种默认的类加载器:
- 启动类加载器:启动类加载器负责加载核心库中的类,这些类位于
java.home/lib
目录下。 - 扩展类加载器:扩展类加载器负责加载扩展库中的类,这些类位于
java.home/jre/lib/ext
目录下。 - 系统类加载器:系统类加载器负责加载用户指定的路径中的类。
- 启动类加载器:启动类加载器负责加载核心库中的类,这些类位于
-
验证阶段 :验证阶段由Java虚拟机负责。Java虚拟机对字节码进行验证,以确保其符合Java虚拟机规范。验证阶段包括以下几个步骤:
- 文件格式验证:检查字节码文件是否符合Java虚拟机规范规定的文件格式。
- 语义验证:检查字节码是否符合Java虚拟机规范规定的语义规则。
- 字节码验证:检查字节码是否符合Java虚拟机规范规定的字节码操作码规则。
-
准备阶段 :准备阶段由Java虚拟机负责。Java虚拟机为类分配内存并设置默认值。准备阶段包括以下几个步骤:
- 分配内存:为类及其成员分配内存空间。
- 设置默认值:为类的静态变量和实例变量设置默认值。
-
解析阶段 :解析阶段由Java虚拟机负责。Java虚拟机将类中的符号引用转换为直接引用。符号引用是指通过符号名称来引用类、方法或字段。直接引用是指通过内存地址来引用类、方法或字段。解析阶段包括以下几个步骤:
- 符号解析:将类中的符号引用转换为直接引用。
- 字段解析:将类中的字段符号引用转换为直接引用。
- 方法解析:将类中的方法符号引用转换为直接引用。
-
初始化阶段 :初始化阶段由Java虚拟机负责。Java虚拟机执行类的静态代码块和构造函数。静态代码块是类加载时自动执行的代码块。构造函数是类实例化时自动执行的代码块。
结语
类加载是Java虚拟机运行Java程序的关键过程之一。类加载过程的五个步骤包括:加载、验证、准备、解析和初始化。通过了解类加载过程,可以更好地理解Java虚拟机的工作原理。