jvm是java virtual machine 的简称,是java虚拟机的意思。
JVM分为三部分可以说JVM有三个方面:规范、实现和实例。
1. JVM规范首先,JVM是一个软件规范。在某种循环的方式中,JVM规范强调了它的实现细节不是在规范内定义的,以便在其实现中获得最大的创造性:
要正确实现Java虚拟机,您只需要能够读取类文件格式并正确执行其中指定的操作
因此,JVM所要做的就是正确运行Java程序。听起来很简单,从外部看起来也很简单,但这是一项艰巨的任务,特别是考虑到Java语言的灵活性和灵活性
作为虚拟机的JVM
JVM是以可移植的方式运行Java类文件的虚拟机。作为一个虚拟机意味着JVM是一个底层的、实际的机器的抽象——比如程序运行的服务器。不管实际存在什么操作系统或硬件,JVM都会为程序创建一个可预测的运行环境。然而,与真正的虚拟机不同,JVM并不创建虚拟操作系统。将JVM描述为托管运行时环境或进程虚拟机会更准确
实现JVM规范会产生一个实际的软件程序,这就是JVM实现。事实上,有很多JVM实现,包括开源和私有的。OpenJDK的HotSpot JVM是参考实现,它仍然是世界上经过最彻底测试的代码库之一。HotSpot 也是最常用的JVM。
几乎所有的授权JVM都是作为OpenJDK和HotSpot JVM的分叉创建的,包括Oracle的授权JDK。开发人员在OpenJDK上创建许可fork通常是出于添加特定于OS的性能改进的愿望。通常,您将下载并安装JVM作为Java运行时环境(JRE)的捆绑部分。
3. 一个JVM实例在JVM规范作为软件产品实现并发布之后,您可以下载并作为程序运行它。下载的程序是JVM的一个实例(或实例化版本)。
大多数时候,当开发人员谈论“JVM”时,我们指的是在软件开发或生产环境中运行的JVM实例。您可能会说,“嘿,Anand,服务器上的JVM使用了多少内存?”或者,“我不敢相信我创建了一个循环调用,堆栈溢出错误导致JVM崩溃。真是个新手犯的错误!”
什么是软件规范?
软件规范(spec)是一种人类可读的设计文档,描述了软件系统应该如何运行。规范的目的是为工程师创建一个清晰的描述和要求。
我们已经讨论过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可以跨操作系统进行互操作,这并不是一项简单的任务。除了每个应用程序的资源需求之外,执行引擎还必须响应每个操作系统环境。这就是JVM在各种需求下的处理方式。



