请注意,本文编写于 532 天前,最后修改于 532 天前,其中某些信息可能已经过时。
JVM的运行过程、架构设计和字节码格式
JVM(Java虚拟机)是Java程序运行的核心组件,它负责将Java字节码转换为机器码并执行。下面将详细介绍JVM的运行过程、架构设计和字节码格式。
-
JVM的运行过程:
- 加载(Loading):JVM从文件系统、网络或其他来源加载符合Java虚拟机规范的Class文件,将其转换为二进制流并加载到内存中。
- 链接(Linking):链接分为三个阶段:
- 验证(Verification):对加载的字节码进行验证,确保其符合Java虚拟机规范,防止恶意代码的执行。
- 准备(Preparation):为类的静态变量分配内存,并设置默认初始值。
- 解析(Resolution):将符号引用转换为直接引用,以便在运行时能够正确访问类、方法和字段。
- 初始化(Initialization):对类进行初始化,包括执行静态变量的赋值和静态代码块的执行。
- 执行(Execution):JVM按照字节码指令集执行程序,包括方法调用、对象创建和内存管理等操作。
- 卸载(Unloading):当类不再被引用时,JVM会卸载该类,并释放相关的内存空间。
-
JVM的架构设计:
- 类加载器(Class Loader):负责将Class文件加载到内存中,并进行校验、解析和初始化,形成可直接使用的Java类型。
- 运行时数据区(Runtime Data Area):JVM将内存划分为不同的数据区域,包括方法区、堆、栈、程序计数器和本地方法栈等,用于存储程序执行过程中的数据和状态。
- 执行引擎(Execution Engine):JVM的核心组成部分,负责执行字节码指令集。执行引擎可以选择解释执行或编译执行,或两者兼备。
- 垃圾收集器(Garbage Collector):负责自动回收不再使用的内存,释放资源并提高内存利用率。
- JIT编译器(Just-In-Time Compiler):将热点代码(频繁执行的代码)编译成本地机器码,提高程序的执行效率。
-
字节码格式:
- 字节码是一种中间代码,是Java源代码经过编译器编译后产生的文件,以.class为扩展名。
- 字节码是一种面向栈的指令集,它不直接操作寄存器,而是通过操作操作数栈和局部变量表来完成计算和存储。
- 字节码指令包括加载、存储、运算、控制流和方法调用等操作,可以实现各种功能。
- 字节码是平台无关的,可以在任何支持JVM的平台上运行。
Learn more:
- 入门:从0到1带你一文读懂JVM 架构、字节码加载及运行过程 - 知乎
- JVM 具体是怎样运行 Java 字节码的_jvm以什么方式运行java字节码的-CSDN博客
- 深入JVM字节码(1) - 西木 | Blog
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA
许可协议。转载请注明出处!