jvm体系结构

各位读者好! 在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

jvm体系结构

jvm体系结构_JVM体系结构:JVM中的执行引擎相关推荐

  1. JVM体系结构:JVM中的执行引擎

    各位读者好! 在JVM系列的上一篇文章中,开发人员了解了虚拟机的ClassLoader和Runtime Data Areas组件. 本教程将帮助开发人员正确理解JVM中的执行引擎 . 1.简介 在继续 ...

  2. 深入理解JVM虚拟机(七):虚拟机字节码执行引擎

    代码编译的结果就是从本地机器码转变为字节码.我们都知道,编译器将Java源代码转换成字节码?那么字节码是如何被执行的呢?这就涉及到了JVM字节码执行引擎,执行引擎负责具体的代码调用及执行过程.就目前而 ...

  3. SQL Server中的执行引擎入门

    简介 当查询优化器(Query Optimizer)将T-SQL语句解析后并从执行计划中选择最低消耗的执行计划后,具体的执行就会交由执行引擎(Execution Engine)来进行执行.本文旨在分类 ...

  4. 设置hive的执行引擎_0506-如何将Hue4.0版本中默认执行引擎设置为Hive而非Impala

    温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图. Fayson的github: https://github.com/fayson/cdhproject 提示 ...

  5. jvm体系结构概述_JVM体系结构:JVM和JVM体系结构概述

    jvm体系结构概述 各位读者好! 在本教程中,我们将了解和学习Java虚拟机(JVM)及其体系结构. 本教程将帮助您正确回答以下问题: Java中的JVM是什么? JVM的不同组件 JVM,JRE和J ...

  6. java解析nes_【JVM系列】一步步解析java执行内幕

    对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式.在本篇文章中,将重点研究java源代码的执行原理,即从程 序员编写JAVA源代码,到最终形成产品,在整个过 ...

  7. jvm执行引擎全解,java解释器即时编译器,全都讲明白

    目录 一.开局一张图 二.执行引擎概述 三.执行引擎工作过程 java代码编译和执行的过程 问题:什么是解释器(Interpreter),什么是JIT编译器? 问题:为什么说java是半编译半解释型语 ...

  8. JVM实战与原理---字节码执行引擎

    JVM实战与原理 目录 字节码执行引擎 1. 方法区 2. 栈帧 2.1 局部变量表 2.2 操作数栈 2.3 动态连接 2.4 方法返回地址 字节码执行引擎 章节目的:虚拟机是如何找到正确的方法,如 ...

  9. JVM学习笔记之-执行引擎(Execution Engine)

    执行引擎概述 执行引擎概述 执行引擎是Java虚拟机核心的组成部分之一. "虚拟机"是一个相对于"物理机"的概念,这两种机器都有代码执行能力,其区别是物理机的执 ...

最新文章

  1. python3 自动化交互模块 pexpect 简介
  2. Java Spring Boot VS .NetCore (七) 配置文件
  3. http、TCP/IP协议与socket之间的区别
  4. Oracle优化11-10046事件
  5. 太强了!这个 Jupyter notebook 离线工具可以用一辈子!
  6. MFC中 CArray(template)的应用
  7. (2017转)文本自动生成研究进展与趋势
  8. GoLang之使用uber-go/dig进行依赖注入
  9. 金融的逻辑1--读书笔记
  10. Kubernetes之ServiceAccount+Secret(超详细汇总)
  11. 瑤里古鎮 婺源鄉村 你會去哪里呢
  12. Android实战技巧之三十九:短信收发
  13. css3属性基本骨架
  14. 2022-2028年全球与中国智能天线行业发展趋势及投资战略分析
  15. larvael 8 联表查询
  16. 计算机二级考试题如何提交,2016年计算机二级考试小技巧
  17. Gym102870 2020-2021 “Orz Panda” Cup Programming Contest 补题记录
  18. WM平台玩转Android全攻略
  19. HDMI 接口及CEC信号
  20. 数字藏品平台搭建需要注意哪些法律风险及资质?

热门文章

  1. 模板:LGV引理(线性代数)
  2. P4083-[USACO17DEC]A Pie for a Pie G【线段树,最短路】
  3. P1407-[国家集训队]稳定婚姻【tarjan,强连通分量】
  4. 纪中A组模拟赛总结(2021.7.16)
  5. 洛谷-P1903 数颜色 分块 bitset
  6. 基于SSM+JBPM的智能化OA办公平台
  7. 漫画:什么是字典序算法
  8. [编程入门]宏定义的练习:输入两个整数,求他们相除的余数。用带参的宏来实现,编程序。
  9. .net三层架构开发步骤
  10. 使用阿里云智能翻译接口案例——CSDN博客