java jvm虚拟机
Java虚拟机是旨在执行其他程序的程序。 这是一个简单的想法,也是我们对功夫进行编码的最出色的例子之一。 JVM破坏了其现状,并在今天继续支持编程创新。
JVM的作用
JVM具有两个主要功能:允许Java程序在任何设备或操作系统上运行(称为“一次编写,在任何地方运行”原则),以及管理和优化程序内存。 当Java在1995年发布时,所有计算机程序都被写入特定的操作系统,并且程序存储器由软件开发人员管理。 因此,JVM是一个启示。
![Javaworld> JVM / JDK / JRE解释器系列> Java虚拟机>概述](https://images.idgesg.net/images/article/2019/03/javaworld_jvm_jdk_jre_explainer_java_virtual_machine_debug_and_optimize_3x2_overview_update-100790558-large.jpg)
图1: JVM的高级视图
对JVM进行技术定义非常有用,而且软件开发人员每天都在考虑它。 让我们分解一下:
- 技术定义 :JVM是执行代码并为该代码提供运行时环境的软件程序的规范。
- 日常定义 :JVM是我们运行Java程序的方式。 我们配置JVM的设置,然后在执行期间依靠它来管理程序资源。
当开发人员谈论JVM时,我们通常是指在机器上运行的进程,尤其是在服务器上运行的进程,该进程代表并控制Java应用程序的资源使用情况。 将此与JVM规范进行对比,该JVM规范描述了构建执行这些任务的程序的要求。
谁开发和维护JVM?
JVM由公司和开放源代码的一些非常聪明的程序员广泛部署,大量使用和维护 。 OpenJDK项目是Sun Microsystems决定开源Java的产物。 OpenJDK通过Oracle对Java的管理得以继续,如今,Oracle工程师完成了许多繁重的工作。
JVM中的内存管理
与正在运行的JVM的最常见交互是检查堆和堆栈中的内存使用情况。 最常见的调整是调整JVM的内存设置 。
垃圾收集
在Java之前,所有程序存储器都由程序员管理。 在Java中,程序内存由JVM管理。 JVM通过称为垃圾收集的过程来管理内存,该过程不断识别并消除Java程序中未使用的内存。 垃圾收集发生在正在运行的JVM中。
在早期,Java受到了很多批评,因为它不像C ++那样“贴近金属”,因此不如C ++快。 垃圾收集过程特别有争议。 从那时起,已经提出了各种算法和方法并将其用于垃圾收集。 通过不断的开发和优化,垃圾收集有了很大的改善。
“接近金属”是什么意思?
当程序员说一种编程语言或平台“接近金属”时,我们是指开发人员能够以编程方式(通过编写代码)来管理操作系统的内存。 从理论上讲,程序员可以通过规定使用多少以及何时丢弃它来使我们的程序发挥更多的性能。 在大多数情况下,将内存管理委派给像JVM这样的高度精炼的过程可以产生比您自己做的更好的性能和更少的错误。
JVM分为三部分
可以说JVM有三个方面:规范,实现和实例。 让我们考虑其中的每一个。
1. JVM规范
首先,JVM是一种软件规范 。 JVM规范以某种循环的方式强调指出, 未在规范中定义其实现细节,以便在实现时发挥最大的创造力:
“要正确地实现Java虚拟机,您只需读取
class
文件格式并正确执行其中指定的操作即可。”
JS Bach曾经描述过类似的音乐创作:
“您要做的就是在正确的时间触摸正确的键。”
因此,JVM要做的就是正确运行Java程序。 听起来很简单,甚至从外面看起来也很简单,但这是一项艰巨的任务,特别是考虑到Java语言的强大功能和灵活性。
JVM作为虚拟机
JVM是一种虚拟机 ,它以可移植的方式运行Java类文件。 成为虚拟机意味着JVM是对底层实际计算机(例如程序在其上运行的服务器)的抽象。 不管实际上存在什么操作系统或硬件,JVM都会为要在其中运行的程序创建可预测的环境。 但是,与真正的虚拟机不同,JVM不会创建虚拟操作系统。 将JVM描述为托管运行时环境或进程虚拟机会更加准确。
2. JVM实现
实现JVM规范会产生一个实际的软件程序,它是一个JVM实现。 实际上,有许多JVM实现 ,包括开源的和专有的。 OpenJDK的HotSpot JVM是参考实现,并且仍然是世界上经过最彻底测试和测试的代码库之一。 HotSpot也是最常用的JVM。
几乎所有许可的JVM都是作为OpenJDK和HotSpot JVM的分支创建的,包括Oracle的许可的JDK。 开发人员通常是出于对OpenJDK的许可而创建叉的,他们希望添加特定于操作系统的性能改进。 通常,您将 Java 虚拟机作为Java Runtime Environment (JRE)的捆绑部分下载并安装 。
3. JVM实例
在JVM规范作为软件产品实现并发布之后,您可以下载并以程序运行它。 该下载的程序是JVM的实例(或实例化版本)。
大多数时候,当开发人员谈论“ JVM”时,我们指的是在软件开发或生产环境中运行的JVM实例。 您可能会说:“嗨,阿南德,该服务器上的JVM使用多少内存?” 或者,“我不敢相信我创建了一个循环调用,并且堆栈溢出错误使我的JVM崩溃了。这是一个新手错误!”
什么是软件规格?
软件规范 (或规范)是人类可读的设计文档,描述了软件系统应如何运行。 规范的目的是为工程师编写明确的描述和要求。
在JVM中加载和执行类文件
我们已经讨论了JVM在运行Java应用程序中的作用,但是它如何执行其功能? 为了运行Java应用程序,JVM依赖于Java类加载器和Java执行引擎。
JVM中的Java类加载器
Java中的所有内容都是一个类,并且所有Java应用程序都是从类构建的。 一个应用程序可以包含一个或数千个类。 为了运行Java应用程序,JVM必须将已编译的.class文件加载到可以访问它们的上下文中,例如服务器。 JVM依靠其类加载器来执行此功能。
Java类加载器是JVM的一部分,可将类加载到内存中并使它们可用于执行。 类加载器使用诸如延迟加载和缓存之类的技术来使类加载尽可能高效。 就是说,类加载不是(例如)便携式运行时内存管理所具有的史诗般的脑筋急转弯,因此技术相对简单。
每个Java虚拟机都包含一个类加载器。 JVM规范描述了在运行时查询和操作类加载器的标准方法,但是JVM实现负责实现这些功能。 从开发人员的角度来看,底层的类加载器机制通常是一个黑匣子。
JVM中的执行引擎
一旦类加载器完成了加载类的工作,JVM就开始在每个类中执行代码。 执行引擎是处理此功能的JVM组件。 执行引擎对于正在运行的JVM是必不可少的。 实际上,出于所有实际目的,它是JVM实例。
执行代码涉及管理对系统资源的访问。 JVM执行引擎位于正在运行的程序(对文件,网络和内存资源的需求)与提供这些资源的操作系统之间。
执行引擎如何管理系统资源
系统资源可以分为两大类:内存和其他所有资源。
回想一下,JVM负责处理未使用的内存,垃圾回收是进行处理的机制。 JVM还负责分配和维护开发人员理所当然的引用结构 。 例如,JVM的执行引擎负责采用Java中的new
关键字之类的东西,并将其转变为特定于OS的内存分配请求。
除了内存,执行引擎还管理用于文件系统访问和网络I / O的资源。 由于JVM可跨操作系统互操作,因此这绝非易事。 除了每个应用程序的资源需求之外,执行引擎还必须响应每个OS环境。 这就是JVM能够处理狂野需求的方式。
JVM的演变:过去,现在,未来
在1995年,JVM引入了两个革命性的概念,它们成为现代软件开发的标准功能:“一次编写,随处运行”和自动内存管理。 当时,软件互操作性是一个大胆的概念,但是如今很少有开发人员会对此三思而后行。 同样,虽然我们的工程先行者必须自己管理程序存储器,但我这一代人还是随垃圾回收一起成长的。
可以说James Gosling和Brendan Eich发明了现代编程,但是在接下来的几十年中,成千上万的人已经完善并建立了他们的思想。 Java虚拟机最初仅用于Java,而如今已发展为支持许多脚本和编程语言,包括Scala,Groovy和Kotlin。 展望未来,很难看到JVM不在开发环境中占主导地位的未来。
关于JVM的全部
这个故事“什么是JVM?Java虚拟机简介”最初由JavaWorld发布。 。
翻译自: https://www.infoworld.com/article/3272244/what-is-the-jvm-introducing-the-java-virtual-machine.html
java jvm虚拟机