各位读者好! 在JVM系列的上一篇文章中,开发人员了解了虚拟机的ClassLoader和Runtime Data Areas组件。 本教程将帮助开发人员正确理解JVM中的执行引擎 。
1.简介
在继续之前,让我们看一下Java虚拟机及其基本特征。
1.1什么是Java虚拟机(JVM)?
Java虚拟机(JVM)是驻留在您的计算机上的抽象虚拟机,并为Java字节码提供了运行时环境以供执行。 JVM可用于许多硬件和软件平台,但是很少有Java开发人员知道Java运行时环境 (JRE)是Java虚拟机 (JVM)的实现。 JVM分析字节码,对其进行解释,然后执行相同的字节码以显示输出。
JVM的基本功能是执行已编译的.class
文件(即字节码)并生成输出。 请注意 ,每个操作系统都有一个不同的JVM,但是在所有操作系统上生成的字节码输出都是相同的。 这意味着在Windows操作系统上生成的字节码也可以在Linux操作系统上运行,反之亦然,从而使Java成为独立于平台的语言。
图1:Java虚拟机概述
1.1.1 JVM做什么?
Java虚拟机执行以下操作:
- 加载所需的
.class
和jar文件 - 分配参考并验证代码
- 执行代码
- 为Java字节码提供运行时环境
1.1.2 JVM内部架构
下图显示了符合JVM规范的Java虚拟机的关键内部组件。
图2:Java虚拟机架构
下面分别说明图2所示的执行引擎组件。
1.2 JVM中的执行引擎
该组件执行通过类加载器分配给运行时数据区域的字节码。 该字节码作为指令读取,每个字节码指令由一个1字节的OpCode和一个加法操作数组成。 请注意 ,Java字节码是以人类可读的形式编写的,因此执行引擎必须将字节码更改为Java虚拟机中的机器可以轻松执行的语言。 执行引擎具有三个主要子组件,即
- 解释器 :此组件读取字节码指令并以顺序方式执行它们。 该组件通过接受文件名参数从命令行运行应用程序。 可以使用以下原型命令:
java <_compiled_file_name_without_extension_>
请记住 ,虚拟机解释器加载的已编译类(即
.class
文件)必须包含采用以下形式的main()
方法。public static void main(String[] args) { // Sample code here}
- JIT(Just In Time)编译器 :该组件抵消了解释器执行速度慢的缺点,并提高了性能。 JIT编译器同时编译字节码的相似部分,从而减少了编译所需的总时间。 该组件中的编译器是指将JVM指令集转换为特定于OS的指令集的转换器。
- Oracle使用一种称为Hotspot Compiler的编译器 ,该编译器通过分析来搜索需要以最高优先级进行编译的热点,然后将该热点编译为本机代码。
- 垃圾收集 :此组件是执行引擎的一部分,该引擎通过收集和删除未引用的对象来释放内存
图3:JVM中的执行引擎
1.3如何编译和执行Java类?
本节将演示Java类的编译和执行 。 让我们借助示例代码片段来了解此过程。
1.3.1创建Java文件
打开操作系统命令提示符,我们将使用“记事本”创建一个简单的Java类。 可以使用以下Java命令。
> notepad _sample_file_name_with_extension_
该命令提供以下输出。
图4:使用记事本创建Java文件
1.3.2编写示例Java代码
如图4所示,该命令将打开一个记事本 ,开发人员可以将示例代码添加到显示虚拟输出的Welcome.java
文件中。 示例代码如图5所示, 成功执行后将显示问候消息 。
图5:添加示例代码
1.3.3编译Java类
将代码保存在Welcome.java
文件中后,开发人员将需要对其进行编译 。 该编译将生成Welcome.class
文件,该文件又将生成一个.class
文件。 要编译该文件,可以使用以下Java命令。
> javac _Java_file_name_with_extension_
该命令提供以下输出。
图6:编译文件
1.3.4执行Java类
现在,开发人员将需要执行生成的Welcome.class
文件以显示输出。 要执行该文件,可以使用以下Java命令。
> java _Compiled_file_name_with_extension_
该命令提供以下输出。
图7:执行文件
1.4 JVM与JRE与JDK
在继续完成本教程之前,让我们看一下Java编程的三个重要关键字。 许多开发人员无法获得两者之间的差异。
- Java虚拟机(JVM) :JVM是一种虚拟机,为执行Java字节码提供了运行时环境
- Java运行时环境(JRE) :JRE是一个在其中运行JVM的环境,并具有Java虚拟机在执行时使用的类库和其他文件。 换句话说,JRE = Java虚拟机(JVM)+运行该应用程序的库
- Java开发工具包(JDK) :JDK是JRE的父集,具有JRE以及开发工具(如编译器,调试器等)所包含的所有内容。换句话说,JDK = Java运行时环境(JRE)+开发工具
这是JVM,JRE和JDK的图形表示。
图8:JVM,JRE和JDK表示形式
这就是这篇文章的全部内容。 学习愉快!
2.结论
在本教程中,开发人员对JVM中的执行引擎组件进行了概述。 您可以在“ 下载”部分中下载示例代码。
3.下载源代码
这是Java虚拟机(JVM)中执行引擎的概述教程。
您可以在此处下载本教程的源代码: Compilation_and_Execution
翻译自: https://www.javacodegeeks.com/2018/04/jvm-architecture-execution-engine-in-jvm.html