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.1 JVM做什么?

Java虚拟机执行以下操作:

  • 加载所需的.class和jar文件

图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中所示的组件。

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

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

1.5如何编译和执行Java类?

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

1.5.1创建Java文件

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

> notepad _sample_file_name_with_extension_

该命令提供以下输出。

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

1.5.2编写示例Java代码

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

图7:添加示例代码

1.5.3编译Java类

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

> javac _Java_file_name_with_extension_

该命令提供以下输出。

图8:编译文件

1.5.4执行Java类

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

> java _Compiled_file_name_with_extension_

该命令提供以下输出。

图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

jvm体系结构概述

jvm体系结构概述_JVM体系结构:JVM和JVM体系结构概述相关推荐

  1. jvm类加载过程_JVM知识点——深入理解JVM的类加载

    前言: 前面又说到Java程序实际上是将.class文件放入JVM中运行.虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换,解析和初始化,最终形成可以被虚拟机直接使用的Java类 ...

  2. java jvm内存分配_JVM系列一:JVM内存组成及分配

    java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚 ...

  3. linux打印jvm内存堆栈_jvm内存堆栈监控之jmap篇

    jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等 jmap (linux下特有, ...

  4. 为什么jvm要分为堆、方法区等?原理是什么?_「JVM」知识点详解一:JVM运行原理详解...

    前言 JVM 一直都是面试的必考点,大家都知道,但是要把它搞清楚又好像不是特别容易.JVM 的知识点太散,不系统,今天带大家详细的了解一下jvm的运行原理. 正文 1 什么是JVM? JVM是Java ...

  5. JVM 学习笔记二十六、JVM监控及诊断工具-GUI篇

    二十六.JVM监控及诊断工具-GUI篇 1.工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局限: (1)无法获取方法级别的分析数据,如方法间的调用关系 ...

  6. JVM基础系列第7讲:JVM 类加载机制

    当 Java 虚拟机将 Java 源码编译为字节码之后,虚拟机便可以将字节码读取进内存,从而进行解析.运行等整个过程,这个过程我们叫:Java 虚拟机的类加载机制.JVM 虚拟机执行 class 字节 ...

  7. JVM基础系列第14讲:JVM参数之GC日志配置

    说到 Java 虚拟机,不得不提的就是 Java 虚拟机的 GC(Garbage Collection)日志.而对于 GC 日志,我们不仅要学会看懂,而且要学会如何设置对应的 GC 日志参数.今天就让 ...

  8. java jvm容器_java – YARN:容器和JVM

    有人能帮我理解YARN中JVM和容器之间的关系吗? >如何创建JVM,它是每个任务的一个JVM吗?多个任务可以同时在同一个JVM中运行吗? (我知道ubertasking很多任务(maps / ...

  9. 您的浏览器没有获得Java Virtual Machine(JVM)支持。可能由于没有安装JVM或者已安装但是没有启用。请安装JVM1.5或者以上版本,如果已安装则启用它。...

    您的浏览器没有获得Java Virtual Machine(JVM)支持.可能由于没有安装JVM或者已安装但是没有启用.请安装JVM1.5或者以上版本,如果已安装则启用它. https://www.j ...

  10. jvm 参数_6个提高性能的JVM参数

    截止到2020年五月,JVM中仅仅只是关于垃圾回收和内存相关的参数就已经超过600个.如果算上其他方面的参数,JVM相关的总参数能轻松超过1000个.参数太多了,弄得人很懵逼.在这边文章中,我们只选取 ...

最新文章

  1. 能解决80%故障的排查思路
  2. oracle 数据泵导出简单使用版
  3. 来吧,我教你画真正的流程图
  4. emr系统 php,完整电子病历系统c#源码
  5. 重磅!AI大牛邢波出任AI大学校长,李开复姚期智都是校董
  6. Codeforces 839B - Game of the Rows
  7. 软件测试:第六次作业
  8. 给我一个及时的问候——XMPP
  9. oracle application r11i,有人在linux 2.1AS下安装过R11i吗?请帮忙解决如下问题
  10. NLP情感分析笔记(四):卷积情感分析
  11. 智钜科技解读:单轨,双轨,多轨,三三复制的区别
  12. c语言编写2阶booth算法,关于Booth算法的C语言实现
  13. CorelDRAW常用工具之手绘工具
  14. 数字万用表性能指标介绍
  15. 三星java安装_三星F488E的JAVA安装方法
  16. ssh白名单_Linux(Ubuntu)SSH登录白名单设置
  17. 数学库(持续更新中 18-05-06)
  18. python中mid_Python算法
  19. Nginx 服务 (编译安装--访问控制--虚拟主机)详解
  20. 搜索引擎如何进行排名?

热门文章

  1. CF505E-Mr. Kitayuta vs. Bamboos【贪心,二分】
  2. jzoj3237-间谍派遣【最小生成树,并查集】
  3. 洛谷P1346-电车【日常图论,最短路,SPFA】
  4. LOJ dfs序1234
  5. 【树状数组】【dfs】树
  6. 【最短路】【SPFA】单源最短路径 (luogu 3371)
  7. 计蒜客 91 地铁 HDU 5263 平衡大师(二分+网络流)
  8. SpringBoot shedlock MongoDb锁配置
  9. Java:comp/env/讲解与JNDI
  10. Java压缩技术(二) ZIP压缩——Java原生实现