编辑
2023-11-25
JVM
00
请注意,本文编写于 532 天前,最后修改于 532 天前,其中某些信息可能已经过时。

JVM的运行过程、架构设计和字节码格式

JVM(Java虚拟机)是Java程序运行的核心组件,它负责将Java字节码转换为机器码并执行。下面将详细介绍JVM的运行过程、架构设计和字节码格式。

  1. JVM的运行过程:

    • 加载(Loading):JVM从文件系统、网络或其他来源加载符合Java虚拟机规范的Class文件,将其转换为二进制流并加载到内存中。
    • 链接(Linking):链接分为三个阶段:
      • 验证(Verification):对加载的字节码进行验证,确保其符合Java虚拟机规范,防止恶意代码的执行。
      • 准备(Preparation):为类的静态变量分配内存,并设置默认初始值。
      • 解析(Resolution):将符号引用转换为直接引用,以便在运行时能够正确访问类、方法和字段。
    • 初始化(Initialization):对类进行初始化,包括执行静态变量的赋值和静态代码块的执行。
    • 执行(Execution):JVM按照字节码指令集执行程序,包括方法调用、对象创建和内存管理等操作。
    • 卸载(Unloading):当类不再被引用时,JVM会卸载该类,并释放相关的内存空间。
  2. JVM的架构设计:

    • 类加载器(Class Loader):负责将Class文件加载到内存中,并进行校验、解析和初始化,形成可直接使用的Java类型。
    • 运行时数据区(Runtime Data Area):JVM将内存划分为不同的数据区域,包括方法区、堆、栈、程序计数器和本地方法栈等,用于存储程序执行过程中的数据和状态。
    • 执行引擎(Execution Engine):JVM的核心组成部分,负责执行字节码指令集。执行引擎可以选择解释执行或编译执行,或两者兼备。
    • 垃圾收集器(Garbage Collector):负责自动回收不再使用的内存,释放资源并提高内存利用率。
    • JIT编译器(Just-In-Time Compiler):将热点代码(频繁执行的代码)编译成本地机器码,提高程序的执行效率。
  3. 字节码格式:

    • 字节码是一种中间代码,是Java源代码经过编译器编译后产生的文件,以.class为扩展名。
    • 字节码是一种面向栈的指令集,它不直接操作寄存器,而是通过操作操作数栈和局部变量表来完成计算和存储。
    • 字节码指令包括加载、存储、运算、控制流和方法调用等操作,可以实现各种功能。
    • 字节码是平台无关的,可以在任何支持JVM的平台上运行。

Learn more:

  1. 入门:从0到1带你一文读懂JVM 架构、字节码加载及运行过程 - 知乎
  2. JVM 具体是怎样运行 Java 字节码的_jvm以什么方式运行java字节码的-CSDN博客
  3. 深入JVM字节码(1) - 西木 | Blog

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!