JVM体系结构: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:Java虚拟机概述

1.1.1 JVM做什么?

Java虚拟机执行以下操作:

  • 加载所需的.class和jar文件
  • 分配参考并验证代码
  • 执行代码
  • 为Java字节码提供运行时环境

1.1.2 JVM内部架构

下图显示了符合JVM规范的Java虚拟机的关键内部组件。

图2: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中的执行引擎

图3:JVM中的执行引擎

1.3如何编译和执行Java类?

本节将演示Java类的编译和执行 。 让我们借助示例代码片段来了解此过程。

1.3.1创建Java文件

打开操作系统命令提示符,我们将使用“记事本”创建一个简单的Java类。 可以使用以下Java命令。

> notepad _sample_file_name_with_extension_

该命令提供以下输出。

图4:使用记事本创建Java文件

图4:使用记事本创建Java文件

1.3.2编写示例Java代码

如图4所示,该命令将打开一个记事本 ,开发人员可以将示例代码添加到显示虚拟输出的Welcome.java文件中。 示例代码如图5所示, 成功执行后将显示问候消息

图5:添加示例代码

图5:添加示例代码

1.3.3编译Java类

将代码保存在Welcome.java文件中后,开发人员将需要对其进行编译 。 该编译将生成Welcome.class文件,该文件又将生成一个.class文件。 要编译该文件,可以使用以下Java命令。

> javac _Java_file_name_with_extension_

该命令提供以下输出。

图6:编译文件

图6:编译文件

1.3.4执行Java类

现在,开发人员将需要执行生成的Welcome.class文件以显示输出。 要执行该文件,可以使用以下Java命令。

> java _Compiled_file_name_with_extension_

该命令提供以下输出。

图7:执行文件

图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表示形式

图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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单c语言课设计题目,C语言课程设计题目

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼18、学生管理系统(限最多2人完成)使用下面的数据&#xff0c;用C设计一个简单的学籍管理系统&#xff0c;实现出最基本的功能。学生基本信息文件(A.TXT)及其内容&#xff1a;A.TXT文件不需要编程录入数据&#xff0c;可用文本编辑工…

python编程语言优缺点_原创001 第一次接触这个神奇而又无所不能的编程语言:Python...

***********************人生苦短&#xff0c;我用Python&#xff0c;不定期更新博客&#xff0c;小伙伴们记得关注******************** OK&#xff0c;说到Python这个语言&#xff0c;相信大家。对它还是有一点小陌生&#xff0c;对于编程语言来说&#xff0c;我们大家耳熟能…

android文件读写操作布局文件代码,android实现文件读写功能

本文实例为大家分享了android实现文件读写功能的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下读取&#xff1a;public static String _getJsonString(String fileName)throws IOException {if ((fileName null) || fileName.isEmpty()) {return "";}Str…

ese如何实现支付 nfc_海运费如何实现快捷支付?答案有了

快捷支付时代&#xff0c;海运费支付能否更简单&#xff1f;“航运在线通”给出了答案。1月9日&#xff0c;中国银行天津市分行举行了“航运在线通”产品发布会。天津市商务局、天津市金融局、天津市税务局、中国人民银行、国家外汇管理局天津市分局、中国银行总分行相关领导及…

smtplib 抄送邮件_用Python收发电子邮件

电子邮件是最古老的互联网服务之一&#xff0c;发明于1969年&#xff0c;它已经50岁了&#xff01;它并不要求收信人发信人同时连接网络&#xff0c;邮件存放于服务器&#xff0c;所以至今在企业内部还在大量使用。而且它是开放协议&#xff0c;没有被某大公司垄断。我们完全可…

带有JUnit 5支持的Ant 1.10.3发布

我们今天刚刚发布了 1.9.11和1.10.3版本的Ant。 这些下载位于Ant项目的下载页面上 。 这两个版本主要是错误修复版本&#xff0c;尤其是1.9.11版本。 由于几个原因&#xff0c;1.10.3版本是重要的版本。 先前的1.10.2版本无意中引入了许多更改&#xff0c;这些更改导致Ant任务中…

android 号码查联系人,Android联系人查询

我在查询电话簿联系人时遇到问题.我需要做的是获取同时输入电话和电子邮件或特定类型的联系人列表.基本上是这样的&#xff1a;public static final String SELECTION "("ContactsContract.Contacts.HAS_PHONE_NUMBER "1) OR " RawContacts.ACCOUNT_TYPE …

console.log()不显示结果_RNA结合蛋白与RNA的缠绵故事,教你不做实验发文章

解螺旋公众号陪伴你科研的第1869天继续学习如何不做实验发文章RNA结合蛋白是(RNA binding protein&#xff0c;RBP)细胞中一类可以识别特殊的RNA结合域与RNA互作&#xff0c;并参与RNA剪切、转运、序列编辑、胞内定位及翻译控制等多种转录后的调控过程中。既然RBP功能这么重要&…

watch gt 鸿蒙,鸿蒙登陆第三站:第一枚Harmony手表亮相?华为Watch GT 2e首发

作者|蒋杰升简称|单蒋让你们荡起昨天(3月19日)中午&#xff0c;华为官方放出两款华为WatchGT 2全新配色&#xff1a;玫瑰金、冰雪白。而前一天则是被猜测新增石墨黑、火山红、薄荷绿三种配色。至此&#xff0c;华为WatchGT 2改款Watch GT 2e&#xff0c;定于3月26日发布已无悬念…

JPA技巧:避免N + 1选择问题

介绍 诸如JPA的ORM框架通过帮助我们在对象<->关系数据映射期间避免了很多样板代码&#xff0c;从而简化了我们的开发过程。 但是&#xff0c;它们还会给表带来一些其他问题&#xff0c;N 1是其中之一。 在本文中&#xff0c;我们将简短地探讨该问题以及避免这些问题的一…

python设计模式有哪些_设计模式教程

设计模式是软件设计中常见问题的典型解决方案。它们就像能根据需求进行调整的预制蓝图&#xff0c;可用于解决代码中反复出现的设计问题。 设计模式与方法或库的使用方式不同&#xff0c;你很难直接在自己的程序中套用某个设计模式。模式并不是一段特定的代码&#xff0c;而是解…

一建机电实务教材电子版_必背!一建《机电实务》高频考点,每日一背

本文部分来自学霸笔记&#xff0c;点击链接关注公众号下载【工业管道的施工程序】1.管道施工前应具备的开工条件&#xff1a;1.工程设计图纸及其他技术文件完整齐全&#xff0c;已按程序进行了工程交底和图纸会审。2.施工组织设计和施工方案已批准&#xff0c;并已进行了技术和…

鸿蒙开发者社区入口,鸿蒙OS 社区

OpenHarmony community欢迎来到OpenHarmony社区&#xff01;Community仓库用于管理OpenHarmony社区治理、开发者贡献指南、开发者贡献协议、社区交流等内容。社区治理组织架构社区交流OpenHarmony社区通过项目管理委员会( Project Management Committee)管理OpenHarmony社区。请…

python 数据去重_科学网—python学习——根据条件提取数据,并去重 - 李立的博文...

[Python字符串提取] 摘要&#xff1a;根据要求进行字符串的提取&#xff0c;并去重 导入分析所需的库import pandas as pd 构造数据集 as1 pd.DataFrame({a:[1,2,3,4], b:[adwdea,asdw;swa,des,swa,dwad;asdw;swa,se;dw,asd;erf,de,de]})编写分析函数 def trans(b): as1[c] b…

assertionerror python_Python成为专业人士笔记–内置模块Modules和函数Functions

“专业人士笔记”系列目录&#xff1a;创帆云&#xff1a;Python成为专业人士笔记--强烈建议收藏&#xff01;每日持续更新&#xff01;​zhuanlan.zhihu.com模块是一个包含Python定义和语句的文件&#xff0c;而函数是执行逻辑的一段代码 。要检查python中内置的函数&#xff…

android 7.0 禁止 imei,Android一些适配

# Android 版本适配重点其他细节请查看官网对应版本&#xff1a;https://developer.android.com/preview## 7.01. 后台优化- 移除了以下静态注册广播通知(动态注册可继续使用)&#xff1a;CONNECTIVITY_ACTION ACTION_NEW_PICTURE ACTION_NEW_VIDEO2. 系统权限更改- Android 7…

【Filament】纹理贴图

1 前言 本文主要介绍使用 Filament 实现纹理贴图&#xff0c;读者如果对 Filament 不太熟悉&#xff0c;请回顾以下内容。 Filament环境搭建绘制三角形绘制矩形绘制圆形绘制立方体 Filament 纹理坐标的 x、y 轴正方向分别朝右和朝上&#xff0c;其 y 轴正方向朝向与 OpenGL ES…

认识JSON绑定:概述系列

JSON绑定的Java API&#xff08;JSON-B&#xff09;1.0增强了Java EE平台对JSON数据交换格式的整体支持。 事实证明&#xff0c; 用于JSON处理的Java API&#xff08;JSON-P&#xff09;1.1十分流行&#xff0c;它们共同构成了完美的合作伙伴&#xff0c;填补了Java EE的JSON功…

c++可视化界面_新基建的福音:智慧楼宇可视化监控系统引领智能化新时代

前言智慧楼宇和人们的生活息息相关&#xff0c;楼宇智能化程度的提高&#xff0c;会极大程度的改善人们的生活品质&#xff0c;在当前 工业互联网 大背景下受到很大关注。目前 智慧楼宇可视化监控 的主要优点包括:智慧化 -- 智慧楼宇是一个生态系统&#xff0c;像人一样拥有感知…

table 多行 宽度不一致_“table”除了桌子,你还知道一些别的意思吗?

就比如"nine-nine table"这可是小学一年级必须要掌握的知识实际上&#xff0c;nine-nine table是九九乘法表&#xff0c;乘法表可以用times table表示&#xff0c;书面用语是multiplication table。table除了桌子的意思外&#xff0c;还有一些别的意思和表达&#xf…