什么是JVM? Java 虚拟机 Archi质地
JVM 是什么 Java?
Java 虚拟机 (JVM) 是一个提供运行时环境来驱动 Java 代码或应用程序。它转换 Java 将字节码转换成机器语言。JVM 是 Java 运行时环境 (JRE)。在其他编程语言中,编译器会为特定系统生成机器代码。然而, Java 编译器为虚拟机生成代码 Java 虚拟机。
JVM 如何工作?
首先, Java 代码被编译成字节码。这些字节码在不同的机器上进行解释。在主机系统和 Java 源,字节码是一种中间语言。JVM 在 Java 负责分配内存空间。

在本 JVM 教程中,您将学习-
ArchiJVM 的架构(Java 虚拟机)
现在在本 JVM 教程中,让我们了解 ArchiJVM 的架构。JVM 的架构 Java 包含类加载器、内存区域、执行引擎等。
1)类加载器
类加载器是用于加载类文件的子系统。它执行三大功能,即加载、链接和初始化。
2)方法区
JVM 方法区存储类结构,如元数据、常量运行时池和方法代码。
3)堆
所有的 对象及其相关的实例变量和数组都存储在堆中。此内存是公用的,由多个线程共享。
4)JVM语言堆栈
Java 语言堆栈存储局部变量及其部分结果。每个线程都有自己的 JVM 堆栈,在创建线程时同时创建。每当调用方法时都会创建一个新框架,并在方法调用过程完成后删除该框架。
5)PC寄存器
PC寄存器存储 Java 当前正在执行的虚拟机指令。在 Java,每个线程都有其单独的PC寄存器。
6)本机方法堆栈
本机方法堆栈保存本机代码的指令,该指令依赖于本机库。它是用另一种语言编写的,而不是 Java.
7)执行引擎
它是一种用于测试硬件、软件或完整系统的软件。测试执行引擎从不包含有关被测产品的任何信息。
8)Native Method 接口
本机方法接口是一个编程框架。它允许 Java 在 JVM 中运行的代码,可由库和本机应用程序调用。
9)本机方法库
本机库是本机库(C, C++) 是执行引擎所需要的。
软件代码编译和执行过程
为了编写和执行软件程序,你需要以下内容
1)编辑 – 要输入程序,可以使用记事本
2) 编译器 – 将高级语言程序转换为本机机器代码
3)链接器 – 将主程序中的不同程序文件引用合并在一起。
4)装载机 – 将文件从硬盘、闪存驱动器、CD 等辅助存储设备加载到 RAM 中执行。执行代码时会自动加载。
5)执行 – 由您的操作系统和处理器处理的代码的实际执行。
在此背景下,请参考以下视频并了解 JVM 的内部工作原理和 JVM 的架构(Java 虚拟机)。
点击 点击这里 如果视频无法访问
C代码编译和执行过程
要了解 Java 编译过程 Java。我们首先快速了解一下 C 中的编译和链接过程。
假设在主函数中,你调用了两个函数 f1 和 f2。主函数存储在文件 a1.c 中。
函数f1存储在文件a2.c中
函数f2存储在文件a3.c中
所有这些文件,即 a1.c、a2.c 和 a3.c,都被输入到编译器。其输出是相应的目标文件,即机器码。
下一步是借助链接器将所有这些目标文件集成到一个 .exe 文件中。链接器将把所有这些文件组合在一起并生成 .exe 文件。
在程序运行过程中,加载程序会将a.exe加载到 内存 执行。
Java 代码编译和执行 Java VM
现在,在本 JVM 教程中,我们来看看 JAVA 的流程。在主函数中,有两个方法 f1 和 f2。
- 主要方法存储在文件a1.java中
- f1 存储在文件中作为 a2.java
- f2 存储在文件中作为 a3.java
编译器将编译这三个文件并生成3个相应的由BYTE代码组成的.class文件。 与 C 不同,无需进行链接.
- Java VM 或 Java 虚拟机驻留在 RAM 上。执行期间,使用类加载器将类文件加载到 RAM 上。验证 BYTE 代码是否存在任何安全漏洞。
接下来,执行引擎会将字节码转换为本机机器码。这就是即时编译。这也是为什么 Java 相对较慢。
注意: JIT 或即时编译器是 Java 虚拟机(JVM)。它同时解释具有类似功能的部分字节码。
为什么 Java 解释型语言和编译型语言?
编程语言 被归类为
- 高级语言练习。 C++, Java
- 中级语言,例如 C
- 低级语言练习 Assembly
- 最后是最低级别,即机器语言。
A 编译 是将程序从一种语言级别转换为另一种语言级别的程序。示例转换 C++ 程序转换成机器码。java编译器将高级java代码转换成字节码(也是机器码的一种)。
An 翻译员 是一种将某一级别的程序转换为另一种编程语言的程序 同一级别。 示例转换 Java 编程到 C++
In Java,即时代码生成器将字节码转换为处于同一编程级别的本机机器码。
因此, Java 既是编译型语言,又是解释型语言。
为什么 Java 慢?
导致缓慢的两个主要原因是 Java 旨在
- 动态链接: 与 C 不同,链接是在运行时完成的,每次运行程序时 Java.
- 运行时解释器: 字节码到本机机器码的转换是在运行时完成的 Java 这进一步减慢了速度
然而,最新版本 Java 很大程度上解决了性能瓶颈。
总结:
- JVM 的完整形式是 Java 虚拟机。JVM 在 Java 是驱动 Java 代码。它将转换 Java 字节码转换成机器语言。
- JVM 架构 Java 包含类加载器、内存区域、执行引擎等。
- 在 JVM 中, Java 代码被编译为字节码。该字节码在不同的机器上进行解释
- JIT 代表即时编译器。JIT 是 Java 虚拟机(JVM)。它用于加快执行时间
- 与其他编译器相比,JVM Java 执行可能会很慢。