# Java 虚拟机基础

> 原文： [https://javabeginnerstutorial.com/core-java-tutorial/java-virtual-machine-basics/](https://javabeginnerstutorial.com/core-java-tutorial/java-virtual-machine-basics/)

JVM 是 Java 虚拟机的缩写形式。 它是一个 Java 字节码处理引擎，它将 Java 字节码转换为机器语言，然后由机器（计算机）执行。 Java 字节码是 Java 与必须在其上执行程序的机器之间的中间语言，并且当 JVM 将 Java 字节码处理为机器语言时，可以执行此执行。

**JVM 简介**

让我们用简单的词来理解 Java 字节码，JVM 和 Machine 的概念。

创建 Java 程序时，将生成扩展名为.java 的文件。 该文件可能包含几个属性，这些属性包括但不限于类，方法，对象等。 然后，使用 Java 编译器编译该.java 文件，该编译器将生成`.class`文件（也称为 Java 字节码）。 JVM 读取此`.class`文件，理解其代码，将代码解释为机器语言，然后执行该文件。

**JVM 平台独立吗？**

Java 由于具有 JVM 而与平台无关，但是 JVM 与平台有关。 必须在其上执行 Java 代码的计算机必须安装了 JVM。

根据必须在其上执行 Java 字节代码的机器，JVM 解释`.class`文件并生成另一种机器语言，该语言仅对该机器可以理解。 不同的计算机可能具有不同的操作系统，例如 Windows，Mac，Unix 或 Linux。 如果没有 JVM，这些操作系统将无法解释 Java 字节码，因为操作系统只能理解机器语言。 JVM 将 Java 字节码转换为机器语言，并使操作系统可以理解以执行该代码。 这意味着 Java 可以在任何计算机上运行，​​但是它需要在该计算机上安装 JVM。

**JVM 的组件**

在解释和执行 Java 字节码时，JVM 使用了几个组件，例如栈，寄存器，垃圾收集器等。 让我们看一下它的一些组成部分：

*   **栈**：它是方法参数和局部变量的仓库。 可以在指向寄存器不同部分的寄存器的帮助下对其进行操作。
*   **寄存器**：JVM 中有许多寄存器，例如 Vars，Frame，Program Counter 和 OpTop。 Vars 寄存器指向当前方法正在使用的局部变量。 框架寄存器指向执行环境，这是用于栈的环境。 Optop 指向操作数栈，在其中执行字节码指令。 程序计数器寄存器指向保存字节码的“方法”区域。
*   **方法区域**：它是 Java 字节码的占位符。 该区域在所有线程之间共享，因此可以确保同步。
*   **垃圾收集器**：它是 JVM 的组件，用于存储实际的 Java 对象。 请注意，Java 对象的引用存储在栈中，而实际对象存储在垃圾收集器中。 Java 使用垃圾回收来释放分配给不同对象的内存，这与 C/C++ 不同，在 C/C++ 中，运算符用于释放内存。