JVM 由哪些部分组成?

Sherwin.Wei Lv8

JVM 由哪些部分组成?

回答重点

JVM 的主要组成部分包括 类加载器子系统(ClassLoader)运行时数据区(Runtime Data Area)执行引擎(Execution Engine) 以及 本地方法接口(Native Interface,JNI)

image.png

我们要知道Java 虚拟机(JVM)是一个运行 Java 程序的虚拟环境,它负责将 Java 字节码转换为机器码并执行。

然后我们再理解型的记忆上述几个组成部分:

  • 首先需要准备编译好的 Java 字节码文件(即class文件)。
  • 然后需要先通过一定方式(类加载器)将 class 文件加载到内存中(运行时数据区)。
  • 又因为字节码文件是 JVM 定义的一套指令集规范,底层操作系统无法直接执行。
  • 因此需要特定的命令解释器(执行引擎)将字节码翻译成特定的操作系统指令集交给 CPU 去执行。
  • 这个过程中会需要调用到一些不同语言为 Java 提供的接口(例如驱动、地图制作等),这就用到了本地方法接口(Native Interface)。

扩展知识

类加载器子系统(ClassLoader)

类加载器子系统负责将 .class 文件加载到 JVM 中。它负责将 Java 类从文件系统或网络中加载,并将它们转化为 JVM 能理解的数据结构。类加载器的主要过程包括:

  • 加载(Loading):找到并加载类文件到 JVM。
  • 链接(Linking):将类文件的数据合并到 JVM 中,分为验证(Verification)、准备(Preparation)和解析(Resolution)三个阶段。
  • 初始化(Initialization):执行类的静态初始化块和静态变量赋值。

关联知识点:

运行时数据区(Runtime Data Area)

执行引擎(Execution Engine)

执行引擎负责将字节码转换为机器指令并执行。执行引擎的主要组成部分包括:

  • 解释器(Interpreter):逐行解释字节码并执行,适用于程序首次运行时。
  • 即时编译器(JIT Compiler):将热点代码(频繁执行的代码)编译为机器码,提升执行效率。

本地方法接口(JNI)

本地方法接口允许 Java 程序调用非 Java 代码(如 C/C++),便于与操作系统或其他本地库交互。JNI 提供了跨语言调用能力,使 Java 程序可以访问操作系统级别的功能或高性能库。

Comments