亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

虚拟机 |什么是 Java 虚拟机及其架构

什么是JVM?

Java 虚拟机 (JVM) 是一个引擎,它提供运行时环境来驱动 Java 代码或应用程序。它将 Java 字节码转换为机器语言。 JVM 是 Java 运行时环境 (JRE) 的一部分。在其他编程语言中,编译器为特定系统生成机器代码。但是,Java 编译器会为称为 Java 虚拟机的虚拟机生成代码。

下面是 JVM 的工作原理

首先,Java 代码被编译成字节码。这个字节码在不同的机器上被解释

在宿主系统和Java源码之间,字节码是一种中介语言。

Java中的JVM负责分配内存空间。

<中心>

<图>

在本 JVM 教程中,您将学习-

JVM 架构

现在在这个 JVM 教程中,让我们了解 JVM 的体系结构。 Java中的JVM架构包含类加载器、内存区、执行引擎等。

<中心>

<图>

1) 类加载器

类加载器是用于加载类文件的子系统。它执行三个主要功能,即。加载、链接和初始化。

2) 方法区

JVM 方法区存储类结构,如元数据、常量运行时池和方法代码。

3) 堆

所有对象及其相关的实例变量和数组都存储在堆中。这种内存是通用的,并且在多个线程之间共享。

4) JVM 语言栈

Java 语言堆栈存储局部变量,它是部分结果。每个线程都有自己的 JVM 堆栈,在创建线程时同时创建。每当调用方法时都会创建一个新框架,并在方法调用过程完成时将其删除。

5) PC 寄存器

PC寄存器存储当前正在执行的Java虚拟机指令的地址。在 Java 中,每个线程都有其独立的 PC 寄存器。

6) 原生方法栈

本机方法栈保存本机代码的指令依赖于本机库。它是用另一种语言而不是 Java 编写的。

7) 执行引擎

它是一种用于测试硬件、软件或完整系统的软件。测试执行引擎从不携带被测产品的任何信息。

8) 原生方法接口

本机方法接口是一个编程框架。它允许在 JVM 中运行的 Java 代码被库和本机应用程序调用。

9) 原生方法库

Native Libraries 是执行引擎所需的 Native Libraries(C, C++) 的集合。

软件代码编译与执行流程

为了编写和执行软件程序,您需要以下内容

1) 编辑器 – 要输入您的程序,可以使用记事本来完成此操作

2) 编译器 – 将您的高级语言程序转换为本机机器代码

3) 链接器 – 将主程序中不同的程序文件引用组合在一起。

4) 加载器 – 将文件从您的辅助存储设备(如硬盘、闪存驱动器、CD)加载到 RAM 中以供执行。执行代码时会自动完成加载。

5) 执行 – 由您的操作系统和处理器处理的代码的实际执行。

在此背景下,参考以下视频了解JVM(Java虚拟机)的内部工作原理和架构。

如果视频无法访问,请单击此处

C代码编译执行过程

了解Java中的Java编译过程。我们先来快速浏览一下C语言的编译和链接过程。

假设在 main 中,您调用了两个函数 f1 和 f2。 main函数存放在文件a1.c中。

函数 f1 存储在文件 a2.c 中

函数 f2 存储在文件 a3.c 中

所有这些文件,即 a1.c、a2.c 和 a3.c,都被提供给编译器。其输出为对应的目标文件,即机器码。

下一步是在链接器的帮助下将所有这些目标文件集成到一个 .exe 文件中。链接器会将所有这些文件组合在一起并生成 .exe 文件。

在程序运行过程中,一个loader程序会将a.exe加载到RAM中执行。

Java 虚拟机中的 Java 代码编译与执行

现在在这个 JVM 教程中,让我们看看 JAVA 的过程。在你的 main 中,你有两个方法 f1 和 f2。

编译器将编译这三个文件并生成 3 个对应的由 BYTE 代码组成的 .class 文件。 与 C 不同,没有链接 .

Java VM 或 Java 虚拟机驻留在 RAM 上。在执行期间,使用类加载器将类文件带到 RAM 中。对 BYTE 代码进行任何安全漏洞验证。

接下来,执行引擎会将 Bytecode 转换为 Native 机器码。这是及时编译。这也是Java比较慢的主要原因之一。

注意: JIT 或即时编译器是 Java 虚拟机 (JVM) 的一部分。它同时解释具有相似功能的部分字节码。

为什么 Java 既是解释语言又是编译语言?

编程语言分类为

一个编译器 是将程序从一种语言级别转换为另一种语言级别的程序。 C++程序转换成机器码的例子。

java编译器将高级java代码转换成字节码(也是机器码的一种)。

一个解释器 是将一个级别的程序转换为同一级别的另一种编程语言的程序。 Java程序到C++的转换示例

在 Java 中,Just In Time Code 生成器将字节码转换为具有相同编程级别的本机机器码。

因此,Java 既是编译语言又是解释语言。

为什么 Java 慢?

Java运行缓慢的两个主要原因是

  1. 动态链接: 与 C 不同,链接是在运行时完成的,每次在 Java 中运行程序时。
  2. 运行时解释器: 字节码到本机机器码的转换是在 Java 运行时完成的,这进一步减慢了速度

但是最新版本的Java在很大程度上解决了性能瓶颈。

总结


java

  1. 什么是机械螺丝?
  2. 什么是虚拟机——类型和优点
  3. 什么是 CNC?
  4. Java 10 - 线程本地握手
  5. 什么是车床?
  6. 什么是建筑设计?
  7. 什么是机械螺栓?
  8. 什么是纺纱机?
  9. 什么是牛奶自动售货机?
  10. 什么是卧式镗床?
  11. 什么是自动冲压机?
  12. 什么是机器维护