什么是 JVM?请解释 JVM。 Archi质地
⚡ 智能摘要
Java 虚拟机(JVM)是提供运行时环境以驱动程序运行的引擎。 Java 代码,将平台无关的字节码转换为本地机器语言。它是以下部分的一部分: Java 运行时环境并启用 Java一次编写,到处运行的可移植性。

JVM 是什么 Java?
Java 虚拟机 (JVM) 是一个提供运行时环境来驱动 Java 代码或应用程序。它可以转换 Java 将字节码转换成机器语言。JVM 是 Java 运行时环境(JRE)。在其他编程语言中,编译器会为特定系统生成机器代码。然而, Java 编译器为称为虚拟机的虚拟机生成代码 Java 虚拟机。
JVM 如何工作?
首先, Java 代码被编译成字节码。这些字节码在不同的机器上被解释执行。在主机系统和……之间 Java 源代码,字节码是一种中间语言。JVM 在 Java 负责分配内存空间。
工作的 Java 虚拟机 (JVM)
ArchiJVM 的架构(Java 虚拟机)
现在,让我们来了解一下JVM的架构。JVM架构如下: Java 包含类加载器、内存区域、执行引擎等。
Java 虚拟机 Archi质地
1)类加载器
类加载器是用于加载类文件的子系统。它执行三个主要功能,即加载、链接和初始化。
2)方法区
JVM 方法区存储类结构,例如元数据、常量运行时池和方法代码。
3)堆
所有的 对象及其相关的实例变量和数组都存储在堆中。此内存是公用的,由多个线程共享。
4) JVM 语言栈
Java 语言栈存储局部变量及其部分结果。每个线程都有自己的 JVM 栈,该栈与线程同时创建。每次调用方法时都会创建一个新的栈帧,并在方法调用过程完成后删除该栈帧。
5)PC寄存器
PC寄存器存储地址 Java 当前正在执行的虚拟机指令。 Java每个线程都有自己独立的程序计数器 (PC 寄存器)。
6)本机方法堆栈
本地方法栈保存依赖于本地库的本地代码指令。这些指令是用另一种语言编写的,而不是用本地库编写的。 Java.
7)执行引擎
执行引擎读取字节码并逐段执行。它使用解释器和即时 (JIT) 编译器将字节码转换为本地机器代码并运行。
8) 本地方法接口
本机方法接口是一个编程框架。它允许 Java 在 JVM 中运行的代码,用于调用本地应用程序和库,并被本地应用程序和库调用。
9)本机方法库
Native Libraries 是一系列原生库(C、 C++) 是执行引擎所需要的。
软件 Code 编译与执行过程
要编写和运行软件程序,您需要以下工具:
- 1)编辑 – 将你的程序输入到笔记本中;可以使用记事本。
- 2) 编译器 – 将你的高级语言程序转换为本地机器代码。
- 3)链接器 – 将主程序中不同的程序文件引用合并在一起。
- 4)装载机 – 将硬盘、U盘或光盘等辅助存储设备中的文件加载到内存中以供执行。加载过程会在代码执行时自动完成。
- 5)执行 – 代码的实际执行,由您的操作系统和处理器处理。
有了这些背景知识,请参考以下视频,学习 JVM 的内部工作原理和架构(Java 虚拟机)。
点击 开始 如果视频无法访问
C代码编译和执行过程
要了解 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
现在,让我们来看一下这个过程。 Java在你的主函数中,你有两个方法,f1 和 f2。
- 主方法存储在文件 a1.java 中。
- f1 存储在文件中作为 a2.java
- f2 存储在文件中作为 a3.java
编译器将编译这三个文件,并生成三个对应的 .class 文件,这些文件由字节代码组成。 与 C 语言不同,它不进行任何链接。
此 Java 虚拟机,或 Java 虚拟机驻留在内存中。执行期间,类加载器会将类文件加载到内存中。系统会对字节码进行安全验证,以发现任何安全漏洞。
接下来,执行引擎会将字节码转换为本地机器代码。这就是即时编译。这也是……的主要原因之一 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 这些性能瓶颈问题已在很大程度上得到解决。











