JVM

生活百科 2023-01-17 20:00生活百科www.aizhengw.cn

JVM

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机禁止了与具体平台相关的信息,使得Java语言编译程式只需生成在Java虚拟机上运行的目标代码(位元组码),就可以在多种平台上不加修改地运行。

基本介绍

  • 中文名Java虚拟机
  • 外文名Java Virtual Machine
  • 简称JVM
  • 套用学科计算机软体
  • 软体语言Java

概述

Java虚拟机有自己完善的硬体架构,如处理器、堆叠、暂存器等,还具有相应的指令系统。
Java虚拟机本质是就是一个程式,当它在命令行上启动的时候,就开始执行保存在某位元组码档案中的指令。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,位元组码档案(.class)就可以在该平台上运行。这就是“一次编译,多次运行”。
Java虚拟机不仅是一种跨平台的语言,而且是一种新的网路计算平台。该平台包括许多相关的技术,如符合开放接口标準的各种API、最佳化技术等。Java技术使同一种套用可以运行在不同的平台上。Java平台可分为两部分,即Java虚拟机(Java virtual machine,JVM)和Java API类库。

体系结构

每个Java程式都离不开Java虚拟机,Java程式的运行依靠具体的Java虚拟机实例。在Java虚拟机规范中,分别用子系统、记忆体区、数据类型以及指令这几个术语来描述的。这些组成部分一起展示出一个抽象化的虚拟机内部的抽象体系结构。
JVM
Java虚拟机主要分为五大模组类装载器子系统、运行时数据区、执行引擎、本地方法接口和垃圾收集模组。其中垃圾收集模组在Java虚拟机规范中并没有要求Java虚拟机垃圾收集,在没有发明无限的记忆体之前,大多数JVM实现都是有垃圾收集的。而运行时数据区都会以某种形式存在于每一个JAVA虚拟机实例中,Java虚拟机规范对它的描述却是相当抽象。这些运行时数据结构上的细节,大多数都由具体实现的设计者决定。
Java虚拟机不是真实的物理机,它没有暂存器,所以指令集是使用Java栈来存储中间数据,这样做的目的就是为了保持Java虚拟机的指令集儘量的紧凑,也便于JAVA虚拟机在那些只有很少通用暂存器的平台上实现。,JAVA虚拟机的这种基于栈的体系结构,有助于运行时某些虚拟机实现的动态编译器和即时编译器的代码最佳化。

必要性

Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机禁止了与具体平台相关的信息,使得Java语言编译程式只需生成在Java虚拟机上运行的目标代码(位元组码),就可以在多种平台上不加修改地运行。Java虚拟机在执行位元组码时,把位元组码解释成具体平台上的机器指令执行。

记忆体管理

(1)对于Java运行时涉及到的存储区域主要包括程式计数器、Java虚拟机栈、本地方法栈、java堆、方法区以及直接记忆体等等。对于每个部分,都有其使用的条件。程式计数器主要是取下一条指令,在Java里面主要是取下一条指令的位元组码档案;Java虚拟机栈主要是利用栈先进后出的特性存储局部变数表,动态连结等,主要包括堆记忆体和栈记忆体,对于程式设计师记忆体分析而言是特别重要的。本地方法栈与上边的栈基本作用差不多,只不过这里是为Java方法而服务。Java堆是记忆体管理中最大的一块,所有的执行绪共享这一块内容,该部分也是垃圾收集器的主要区域。
(2)虚拟机的垃圾回收机制是完善的,动态记忆体分配和回收是比较成熟的,在记忆体管理机制中,大部分都不需要我们考虑记忆体回收,只有Java堆和方法区需要我们考虑处理记忆体问题。一般的对于记忆体回收就是判断某一个部分是生存还是死亡,主要是通过下面二种算法
其一是引用计数算法,本算法实现简单,判定的效率也是比较高的,很多的软体都使用了该算法,主流的Java并没有选择该算法,核心的问题是该算法难以处理对象之间相互调用的问题。
其二是称可达性分析算法,该算法核心思想是依靠判断对象是否存活来实现的,本算法是通过一系列的GC ROOTS的对象作为起始点,採用搜寻的算法遍历引用链,如果搜寻过程中没有发现该节点,则认为该节点是不可达的,即可回收的,在现在的主流Java里面,一般可以使用该算法处理问题。

特性

1、移植性
无论是GC还是Hotspot都可以用在任何Java可用的地方。比方说,JRuby可以运行在其他平台上,Rails套用就可以运行在IBM主机上的JRuby上,而且这台IBM主机运行的是CP/CMS.实际上,由于Java和OpenJDK项目的开源,我们正在看到越来越多的平台的衍生,JVM的移植性也将越来越棒。
2、成熟
JVM已有多年的历史,在过去的这些年里,许多开发者为它做出了许多贡献,使得它的性能一次又一次地提升,让JVM变得更加稳定、快速和广泛。
3、覆盖面
JRuby和JVM上的其他语言项目已经被承认,一个例子是invokedynamic specification(akaJSR292)。JSR越来越配合新的语言,JVM已不再是Java一个人定製规则。JVM正在构建成为类如JRuby等项目的优良平台。还有一个MLVM(multiple languageVM)项目,好比是新特性的清算机构,是一个许多企业套用的开发者试图添加套用的地方,而这些套用正是他们想在JVM中看到的。而且JVM开发者互相协作、彼此影响,无疑这有利于JVM新特性的诞生。这些细节都可以看到JVM正在关注开发者的需求,扩大他的覆盖面。

碎片回收

Java类的实例所需的存储空间是在堆上分配的。解释器具体承担为类实例分配空间的工作。解释器在为一个实例分配完存储空间后,便开始记录对该实例所占用的记忆体区域的使用。一旦对象使用完毕,便将其回收到堆中。在Java语言中,除了new语句外没有其他方法为一对象申请和释放记忆体。对记忆体进行释放和回收的工作是由Java运行系统承担的。这允许Java运行系统的设计者自己决定碎片回收的方法。在SUN公司开发的Java解释器和Hot Java环境中,碎片回收用后台执行绪的方式来执行。这不但为运行系统提供了良好的性能,而且使程式设计人员摆脱了自己控制记忆体使用的风险。
上一篇:G·巴克霍恩 下一篇:BBQ餐厅

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有