欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识
本文由 ImportNew - 辰午 翻译自 developer。接待插手翻译小组。转载请见文末要求。

JVM(Java虚拟机)是一个抽象的计较模子。就如同一台真实的呆板,它有本身的指令集和执行引擎,可以在运行时操控内存区域。目标是为构建在其上运行的应用措施提供一个运行情况。JVM可以解读指令代码并与底层举办交互:包罗操纵系统平台和执行指令并打点资源的硬件体系布局。本文主要对JVM举办概述,并先容Java措施是如安在上面执行的。

虚拟机

从本质上讲,虚拟机是个被构建来提供特定或通用目标处事情况的非实体计较机。这听起来像是一个仿真器,用来仿真呆板未设置或不能按要求执行任务的硬件组件。因此,我们要做的就是建设一个软件,以软件的形式模仿硬件提供的处事,使之看起来这个特定的硬件在系统中是实际存在的。虚拟机在必然水平上利用CPU虚拟化,为实际的硬件问题提供一个接口。所以可以说它实际上有两种成果:提供一个虚拟的情况,可能将某些不存在的事物举办抽象化。可是当我们深入相识之后会发明,这两种成果有着很明明的差异。我们此刻暂且不看它们之间的差异点,劳务派遣管理系统,它们的配合点在于都“冒充”成它们不是的对象。正如Popek和Goldberg在论文“Formal Requirements for Virtualizable Third Generation Architectures”里说的,昆山软件开发,它是“一个真实呆板有效、独立的复成品。”

基于差异的需求和用途,虚拟机有许多范例。一种叫完全虚拟化(full virtualization),这种虚拟机表示得像一台真正的呆板。其他范例的虚拟时机更风雅,更专业,好比历程虚拟化(process virtualization)。而对JVM举办分类是很坚苦的,因为它对CPU举办了虚拟化,有本身的运行时情况、与底层平台协调事情的内存打点器、垃圾收集器,虽然尚有大量作为中间字节码输入的类库,最后但同样重要的是,它可以或许模仿呆板的寄存器、仓库等等。简朴地说,它是被Java编译器编译为java的本质——字节码的游乐场。字节码实际上是JVM用来将代码从头翻译为当地呆板指令所利用的呆板代码。

类文件名目

有趣的是,其实JVM并不体贴Java语言或其他编程语言的语义和语法布局。当JVM执行一段措施的时候,它主要存眷的是一种称为“类文件”的特定文件名目。*.class类文件名目和Java代码界说的面向工具的类布局毫无干系。编译器将*.java文件编译成*.class文件,然后JVM对*.class文件举办解译,它不体贴这个类文件是由哪种编译器生成的,只要切合类文件的文件名目即可。Java编译器将一段措施编译为等价的类文件。这些类文件实际上包括了半编译的代码——字节码。之所以称之为半编译,是因为字节码并不像C/C++编译器编译的二进制文件一样会被直接执行。字节码要先被输入到JVM中,然后再转换为底层平台可以执行的最终指令。所以字节码包括了JVM的指令、标记表和其他的帮助信息。不管何种语言,能按照JVM的语法和布局约束编译生成字节码的编译器,都是一个可以在JVM上执行的候选者。

JVM的定位

JVM将自身定位于字节码和底层平台之间。底层平台是指操纵系统(OS)和硬件。操纵系统和硬件体系布局在差异的呆板上大概差异,可是同一段Java措施可以不消做任何的代码修改就能在差异的呆板上运行。这是在虚拟情况中执行的措施语言的奇特之处。譬喻,由其他措施语言编译器编译的方针代码如C++和Java对比的差异点在于,C++措施需要被特定平台的编译器从头编译,从而使它能在差异的体系布局上面运行。而Java代码并不需要做任何改变,因为由Java编译器编译的字节码是在外围的JVM上执行。因此,JVM认真从头解译由Java编译器生成的字节码,并和底层平台协调事情。也就是说,尽量Java编译器生成的功效是平台独立的,但JVM与特定平台相关的。除非两台呆板有沟通的体系布局,在某个别系布局上安装和利用的JVM大概换一台呆板就不能正常事情了。

图1 JVM布局

相对付JVM, JRE和JDK又是什么?

想要运行Java措施,我们需要JVM因为它提供了字节码的运行情况。Oracle提供了两种差异的产物:JDK(Java开拓东西)和JRE(Java运行情况)。JRE是我们安装运行Java措施的最根基软件。它和Java类库以及运行Java措施所需要的其他组件一起够成了JVM的一个实现。所以,假如我们想运行一个类文件或一段字节码,仅需要JRE就够了。而JDK(Java开拓东西)是JRE的超集。它包括了JRE提供的所有对象,包罗建设类文件的东西如Java编译器、调试器和其他很多开拓Java措施相关的东西。所以,昆山软件开发,当我们要建设类文件(编译Java源码)时,我们就需要JDK。下面是一张Java API文档的截图。留意构成JDK,JRE和Java SE API焦点类库的组件;通过这张截图你可以相识JRE和JDK内里都有哪些内容。

 虚拟机 从 <a href=劳务调派系统本质上讲" class="aligncenter size-full wp-image-29226" title="2" src="/uploads/allimg/c180729/1532PPR60O0-255S.jpg" />