JVM体系结构:JVM和JVM体系结构概述

各位读者好! 在本教程中,我们将了解和学习Java虚拟机(JVM)及其体系结构。 本教程将帮助您正确回答以下问题:

  • Java中的JVM是什么?
  • JVM的不同组件
  • JVM,JRE和JDK之间的区别

1.简介

Java虚拟机(JVM)是​​驻留在您的计算机上的抽象虚拟机,并为Java字节码提供了运行时执行环境。 JVM可用于许多硬件和软件平台,但是很少有Java开发人员知道Java运行时环境 (JRE)是Java虚拟机 (JVM)的制定。 JVM分析字节码,对其进行解释,然后执行相同的字节码以显示输出。

JVM的基本功能是执行已编译的.class文件(即字节码)并生成输出。 请注意 ,每个操作系统都有不同的JVM,但是在所有操作系统上生成的字节码输出都是相同的。 这意味着在Windows操作系统上生成的字节码也可以在Linux操作系统上运行,反之亦然,从而使Java成为独立于平台的语言。

图1:Java虚拟机概述

图1:Java虚拟机概述

1.1 JVM有什么作用?

Java虚拟机执行以下操作:

    • 加载所需的.class和jar文件
图2:JVM组件

图2:JVM组件

1.2 Java虚拟机的类型

Java版本具有Java虚拟机(JVM)的两种不同实现,即

  • Java Hotspot Client VM :这是JDK 2.0运行时环境的默认虚拟机,并通过减少应用程序启动时间和内存占用量进行了调整,以在客户端环境中运行应用程序时获得最佳性能。
  • Java Hotspot Server VM :此虚拟机旨在提高程序执行速度,以便在服务器环境中运行应用程序。 通过使用服务器命令行选项来调用此虚拟机

1.3 JVM的内部架构

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

图3:Java虚拟机架构

图3:Java虚拟机架构

下面说明图3中所示的组件。

1.3.1类加载器

类加载器子系统用于加载/读取.class文件,并将字节码保存在JVM方法区域中。 该子系统执行三个主要功能,即:

  • 加载 :此组件处理类的加载
  • 链接 :此组件将验证生成的字节码并分配引用
  • 初始化 :此组件将为静态变量分配其原始值并执行静态块

1.3.2运行时数据区

该子系统分为五个主要部分,即

  • 方法区域 :此组件保存每个.class文件的类级别数据,例如元数据,常量运行时池,静态变量,方法的代码等。每个JVM只有一个方法区域,并且在所有类之间共享
  • 堆区域 :此组件是JVM内存的一部分,所有对象及其对应的实例变量和数组都存储在JVM内存中。 只有一个堆区域,并且在多个线程之间共享,因为该区域中存储的数据不是线程安全的
  • 堆栈区域 :该组件还是JVM内存的一部分,所有临时变量都存储在该内存中。 该区域具有堆栈帧,并为每个线程分配一个帧。 随着线程执行的完成,相应的帧也会被破坏。 堆栈区域是线程安全的,因为它不是共享资源,并且分为三个子实体,例如:
    • 局部变量数组

    该区域在方法调用和返回期间起着重要作用。

  • PC(程序计数器)寄存器 :该组件保存当前正在执行的JVM指令的地址。 Java中的每个线程都有其自己的PC寄存器来保存当前执行指令的地址
  • 本机方法堆栈 :此组件用另一种语言编写,并保存本机方法信息。 Java中的每个线程都有一个单独的本机方法堆栈

1.3.3执行引擎

该组件执行分配给运行时数据区域的字节码,并具有三个主要子组件,即:

  • 解释器 :此组件读取字节码指令并以顺序方式执行它们
  • JIT(即时)编译器 :该组件抵消了解释器执行缓慢的缺点,并提高了性能。 JIT编译器同时编译字节码的相似部分,从而减少了编译所需的总时间。 该组件中的编译器是指将JVM指令集转换为特定于OS的指令集的转换器
  • 垃圾收集 :此组件是执行引擎的一部分,该引擎通过收集和删除未引用的对象来释放内存
图4:JVM中的执行引擎

图4:JVM中的执行引擎

1.3.4本机方法接口(JNI)

该组件是一个编程框架,它允许Java代码调用库或本机应用程序(即特定于系统的硬件和OS的程序)或由其调用。

1.3.5本机方法库

该组件是执行引擎所需的本机C,C ++库的集合。

1.4 JVM与JRE与JDK

JDK,JRE和JVM是Java编程的三个重要关键字,许多开发人员未能将二者区分开。

  • Java虚拟机(JVM) :JVM是一种虚拟机,为执行Java字节码提供了运行时环境
  • Java运行时环境(JRE) :JRE是一个运行JVM的环境,并具有Java虚拟机在执行时使用的类库和其他文件。 换句话说,JRE = Java虚拟机(JVM)+运行该应用程序的库
  • Java开发工具包(JDK) :JDK是JRE的父集,具有JRE以及开发工具(如编译器,调试器等)所包含的所有内容。换句话说,JDK = Java运行时环境(JRE)+开发工具

这是JVM,JRE和JDK的图形表示。

图5:JVM,JRE和JDK表示形式

图5:JVM,JRE和JDK表示形式

1.5如何编译和执行Java类?

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

1.5.1创建Java文件

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

> notepad _sample_file_name_with_extension_

该命令提供以下输出。

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

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

1.5.2编写示例Java代码

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

图7:添加示例代码

图7:添加示例代码

1.5.3编译Java类

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

> javac _Java_file_name_with_extension_

该命令提供以下输出。

图8:编译文件

图8:编译文件

1.5.4执行Java类

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

> java _Compiled_file_name_with_extension_

该命令提供以下输出。

图9:执行文件

图9:执行文件

这就是这篇文章的全部内容。 学习愉快!

2.结论

在本教程中,我们对Java虚拟机(JVM)及其核心组件进行了概述。 本教程可以总结为:

  • JVM是执行Java代码并通过将Java字节码转换为机器语言来产生输出的虚拟机
  • JIT编译器是JVM的子组件,用于加快性能和执行时间
  • Java的执行速度 ,原因是:
    • 动态链接

但是,这些瓶颈性能问题在新的Java Development Kit( JDK )版本中得到了一定程度的解决。 开发人员可以在“ 下载”部分下载示例代码片段。

3.下载源代码

这是Java虚拟机(JVM)及其核心组件的概述教程。

下载
您可以在此处下载本教程的源代码: JVM_Example

翻译自: https://www.javacodegeeks.com/2018/04/jvm-architecture-overview-of-jvm-and-jvm-architecture.html

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

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

相关文章

计算机二级web题目(7.1)--综合选择题1

(1)程序流程图中带有箭头的线段表示的是(C)。 A、图元关系 B、数据流 C、控制流 D、调用关系 解析:①长方形表示要处理执行的步骤。②菱形表示条件判断。③平行四边形表示输入或输出。 (2)结构化程序设计的基本原则不包括(A&#…

java8 javafx_Java 8的新增功能(第1部分– JavaFX)

java8 javafx免责声明:我不为Oracle工作,也不以任何方式代表Oracle。 此功能列表不是官方的。 作为“局外人”,这只是我研究的一部分。 Java 8已在大约两个月前完成了功能,并且开发者预览版即将到来(两周后&#xff0…

Java简单内存解析

堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。 通常所说的栈(Stack)&…

servlet3异步_Servlet 3的异步Servlet功能

servlet3异步在深入了解什么是异步Servlet之前,让我们尝试了解为什么需要它。 假设我们有一个Servlet,处理时间很长,如下所示。 LongRunningServlet.java package com.journaldev.servlet;import java.io.IOException; import java.io.Prin…

计算机二级web题目(7.2)--基本操作题1

前些天发现了一个巨牛的人工智能学习电子书,通俗易懂,风趣幽默,无广告,忍不住分享一下给大家。(点击跳转人工智能学习资料) 1、在考生文件夫下的Web1目录中,存有1.htm和label2.htm文件&#xff…

计算机二级web题目(7.3)--简单应用题1

说明:如有不清楚的地方,可以评论区留言,及时回复。 1、在考生文件夹下的Web3目录中,存有3.htm文件,该文件不完整,请在标有********Found******字符串的注释行下一语句的下划线处填入正确内容,然…

使用Spring Security 5.0和OIDC轻松构建身份验证

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 Spring Security不仅是一个功能强大且可高度自定义的身份验证和访问控制框架&#xf…

计算机二级web题目(7.4)--综合应用题1

说明:如有不清楚的地方,可以评论留言,及时回复。 1、在考生文件夹下的Web5目录中,存有5.htm文件,该文件不完整,请在标有 *********Foun********字符串的往释行 下一-语句的下划线处填入正确内容&#xff0c…

(1.2)HarmonyOS鸿蒙config.json

跟应用相关的所有信息,都会在config.json文件中进行配置。 项目的配置(app) 比如:厂商信息,项目的版本等 应用在设备上的配置信息(deviceConfig) 比如:应用运行时进程名&#xff0c…

Arquillian变色龙。 简化您的Arquillian测试

Arquillian Chameleon的诞生是为了简化Arquillian测试的配置。 我很自豪地宣布,使用1.0.0.CR2版本,我们不仅简化了Arquillian测试的配置方式,而且简化了编写方式。 在此新版本中,添加了三个新的简化: 您只需要使用1个…

为什么要学习鸿蒙,HarmonyOS不只是操作系统

前些天发现了十分不错的人工智能学习网站,通俗易懂,风趣幽默,没有广告,分享给大家,大家可以自行看看。(点击跳转人工智能学习资料) 前言 对于IT行业,头部力量或者已经形成生态的东西…

mysql 视图树查询_TreeView (树视图)遍历数据库的方法

多数从事数据库编程人员都经历过,对新接触的数据库技术无论是低版本Foxbase、Access97-2000还是支持网络环境高版本的Sql Server2000和 Oracel等系统,都经过一个循循渐进、吃苦耐劳学习过程,达到知识技术从量变到质变的过程,才能把…

(1.3)HarmonyOS鸿蒙启动程序运行流程

程序启动运行流程: ①解析config.json文件 ②初始化 ③获取入口Ability的全类名(config.json里的module里的mainAbility) ④找到Ability并运行 ⑤运行Ability中的子界面 ⑥加载xml文件,展示内容(xml在resources里面&am…

arraylist内存溢出_ArrayList使用内存映射文件

arraylist内存溢出介绍 内存中的计算由于负担得起的硬件而开始兴起,大多数数据保留在RAM中以满足延迟和吞吐量的目标,但是将数据保留在RAM中会增加垃圾收集器的开销,尤其是在您不预先分配内存的情况下。 因此,有效地我们需要一种无…

【vtkWidgetRepresentation】第十八期 vtkHoverWidget

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享vtkHoverWidget,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. vtkHoverWidget vtkHoverWidget用于在呈现窗口中…

Java面向对象(2)--类的成员属性

基本格式:修饰符 数据类型 属性名 初始化值 ; 说明1: 修饰符 ①常用的权限修饰符:private、缺省、protected、public ②其他修饰符:static、final 说明2:数据类型 任何基本数据类型和任何引用数据类型。 说明3:属性…

使用Spring Session和JDBC DataStore进行会话管理

在Web应用程序中,用户会话管理对于管理用户状态至关重要。 在本文中,我们将学习在集群环境中管理用户会话所遵循的方法,以及如何使用Spring Session以更加简单和可扩展的方式实现它。 通常在生产环境中,我们将有多个服务器节点&a…

Java面向对象(3)--类的成员方法

基本格式: 修饰符 返回值类型 方法名(参数类型 形参1, 参数类型 形参2, …){方法体程序代码;return 返回值; }修饰符:public,缺省,private, protected等 返回值类型: ①没有返回值&#xff1a…

python统计图像直方图_计算机视觉7-像素点直方图统计、掩膜图像

1.灰度图的直方图(1)调用库import cv2import matplotlib.pyplot as pltimport numpy as np #创建掩膜时需要(2)绘图-方法1imgcv2.imread(F:cat.jpg,0)plt.hist(img.ravel(),256,[0,256])plt.show()plt.hist是一个画直方图的命令;img.ravel()可以将图片转化成一维数组…

计算机二级web题目(8.1)--综合选择题2

前些天发现了一个巨牛的人工智能学习电子书,通俗易懂,风趣幽默,无广告,忍不住分享一下给大家。(点击跳转人工智能学习资料) 1、一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再…