加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 综合聚焦 > 资源网站 > 空间 > 正文

核心基础:理解何为JVM?掌握Java虚拟机构成精髓

发布时间:2019-03-07 14:21:43 所属栏目:空间 来源:牛旦教育IT课堂
导读:副标题#e# Java虚拟机是一个程序,其目的是执行其他程序。 这是一个简要的观念,也是我们编码功夫最好的示例之一。 JVM打破了当时的现状,并继续支持今天的编程创新。 1.JVM的用法和定义 JVM有两个主要功能:允许Java程序在任何设备或操作系统上运行(称为一
副标题[/!--empirenews.page--]

核心基础:理解何为JVM?掌握Java虚拟机构成精髓

Java虚拟机是一个程序,其目的是执行其他程序。 这是一个简要的观念,也是我们编码功夫最好的示例之一。 JVM打破了当时的现状,并继续支持今天的编程创新。

1.JVM的用法和定义

JVM有两个主要功能:允许Java程序在任何设备或操作系统上运行(称为"一次写入,随处运行",即"Write once, run anywhere"原则),以及管理和优化程序内存。 当Java于1995年发布时,所有计算机程序都被写入特定的操作系统,程序n内存由软件开发人员管理。 所以说,JVM是一个新模式启示。

图-1:JVM高层视图

拥有JVM的技术定义是很有用的,那样,软件开发人员就可以通过常规的方式思考它。这可以分解表述如下:

  • 技术定义:JVM是执行代码并为该代码提供运行时环境的软件程序的规范。
  • 常规定义:JVM是我们运行Java程序的工作方式。 我们配置JVM的设置,然后依赖它来在执行期间管理程序资源。

当开发人员谈论JVM时,我们通常是指在一台机器上运行的进程,尤其是服务器,它代表并控制Java应用程序的资源使用情况。这些是参照JVM规范实现的的——所谓JVM规范,,其描述了构建执行这些任务的程序的要求。

那么,谁开发和维护JVM?

——JVM由一些非常聪明的程序员、公司和开源组织来广泛部署、大量使用、升级开发和维护的。 OpenJDK项目是Sun Microsystems决定开源Java的后代。Sun被Oracle收购,OpenJDK继续通过Oracle来对Java管理,现在由Oracle工程师完成了大量繁重工作。

2.JVM中内存管理

与正在运行的JVM最常见的交互是检查堆(Heap)和堆栈(stack,简称为栈)中的内存使用情况。 最常见的调整是调优JVM的内存设置。

2.1.垃圾回收

在Java之前,所有程序内存都由程序员管理。 在Java中,程序内存由JVM管理。 JVM通过称为垃圾收集的进程来管理内存,该进程持续识别并消除Java程序中未使用的内存。 垃圾收集发生在正在运行的JVM中。

在早期,Java因为没有像C那样"接近源质(close the metal)"而受到很多批评,因此没有那么快。 垃圾收集过程尤其引起争议。 从那时起,已经提出了各种算法和方法,并用于垃圾收集。 随着兼容性开发和优化,垃圾收集得到了极大的改进。

注:接近源质是什么意思?

——当程序员说编程语言或平台"接近源质"时,我们的意思是开发人员能够以编程方式(通过编写代码)管理操作系统的内存。 从理论上讲,程序员可以通过规定使用多少以及何时丢弃它,以便从我们的程序中获得更多性能。 在大多数情况下,将内存管理委派给高度精炼的流程(如JVM)可以产生超过你自己管理的更好性能和更少错误。

3. JVM分为三部分

3.1.JVM规范

首先,JVM是一个软件规范。 以某种通告或宣告方式表达其要求,JVM规范强调其实现细节不在其规范中具体定义,以便在其实现中实现最大的创造性(如下通告要求):

"要正确实现Java虚拟机,您只需要能够读取类文件格式并正确执行其中指定的操作。"

还有这样的例子,如J.S. 巴赫(Bach)曾经类似的描述过音乐创作:

"你所要做的就是在合适的时间触碰那正确的调调(就是音乐家或唱歌所说那个key,键)。"

因此,JVM所要做的就是正确运行Java程序。 听起来很简单,甚至可能从外面看起来也很简单,但这是一项艰巨的任务,特别是考虑到Java语言的强大功能和灵活性。

注意,JVM就是个虚拟的机器,可进一步描述如下:

JVM是一个以便携方式运行Java类(class)文件的虚拟机器机。 作为虚拟机,意味着JVM是底层实际机器的抽象——例如运行程序的服务器。 无论实际存在哪种操作系统或硬件,JVM都会为程序在其中运行创建可预测的环境。 但是,与真正的虚拟机不同,JVM不会创建虚拟操作系统。 将JVM描述为托管运行时环境或进程虚拟机会更准确。

3.2.JVM实现

实现JVM规范会产生一个实际的软件程序,这是一个JVM实现。 事实上,有许多JVM实现,包括开源和专有。 OpenJDK的HotSpot JVM是参考实现,并且仍然是世界上经过最彻底试验和测试(tried-and-tested)的代码库之一。 HotSpot也是最常用的JVM。

几乎所有许可的JVM都是作为OpenJDK和HotSpot JVM的分支而创建的,包括Oracle的许可JDK。 从OpenJDK创建许可分支的开发人员通常希望添加特定于操作系统的性能改进。 通常,您将JVM作为Java Runtime Environment(JRE)的捆绑部分下载和安装。

3.3.JVM实例

在JVM规范被实现并作为软件产品发布后,您可以下载并作为程序运行它。下载的程序是JVM的实例(或实例化版本)。

大多数时候,当开发人员谈论"JVM"时,我们指的是在软件开发或生产环境中运行的JVM实例。 您可能会说,"嘿,Solo,这个服务器上的JVM使用了多少内存?" 或者,"我无法相信我创建了一个循环调用,并且堆栈溢出错误导致我的JVM崩溃。这是一个新手错误啊!"

提示:软件规范是何物?

软件规范(或规范)是描述软件系统应如何操作的人类可读设计文档。规范的目的是为工程师编码创建一份清晰的描述和要求。

4.JVM加载和执行class文件

我们已经讨论了JVM在运行Java应用程序中的作用,但它如何执行其功能? 为了运行Java应用程序,JVM依赖于Java类加载器和Java执行引擎。

4.1.Java类加载器

Java中的所有东西都是类(或者每件东西都是一个类),所有Java应用程序都是从类构建的。 应用程序可以包含一个类或数千个。 为了运行Java应用程序,JVM必须将已编译的.class文件加载到可以访问它们的上下文(例如服务器)中。 JVM依赖于其类加载器来执行此功能。

Java类加载器是JVM的一部分,它将类加载到内存中并使它们可用于执行。 类加载器使用延迟加载和缓存等技术来使类加载尽可能高效。 也就是说,类加载不是(比如说)便携式运行时内存管理的史诗般的脑筋急转弯,也就是说这些技术相对简单。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读