Java程序运行机制

Java程序运行机制

java语言是一种特殊的高级语言,他既有编译型语言的特征,也既有解释型语言的特征,因为他要先经过编译然后在解释两个步骤才能真正运行。

高级语言的运行机制-编译型/解释型

计算机高级语言按照运行机制来划分,可分为编译型与解释性两种语言。
编译型语言
编译型语言是指需要特定的编译器,将高级语言的源代码一次性的“翻译”成能够被特定平台(操作系统)硬件识别的机器码(包括机器执行和操作数),并将文件包装成可以被该平台执行的程序类型的格式,这个转换的过程被称为编译。编译后的可执行程序可以脱离开发环境独立运行,因为编译后的代码已经能够被平台识别了,而且效率较高。
但因为编译生成的可执行程序是被译为特定平台的机器码,所以不能在其他平台上运行,若需要移植,则需要将源代码移植到其他平台上,然后在依靠其他平台的特定编译器重新编译成能够被其他平台能够识别的机器码。
C/C++/Pascal等高级语言都属于编译型语言。
解释型语言
解释型语言是指使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行的语言,这种语言不需要先进行编译,是在运行的时候在进行逐行解释运行,所以效率较低。
可以认为,每次程序运行的时候都要编译一次再进行运行,而且不能脱离解释器独立运行,但这种解释型语言有一个好处就是跨平台比较容易,只需要给平台提供相应的解释器,就可以将源程序解释成能够被平台识别的机器码了。解释型语言可以实现源程序级的移植,但这相对于编译型语言是牺牲了执行效率。
当前的Ruby、Python都属于解释型语言。

Java程序的运行机制和JVM

Java语言的运行机制相对于普通的高级语言有些特特殊,因为java源代码必须要先经过编译器(java中是javac)编译,将源代码编译成一种于平台无关的字节码文件(也就是.class)文件,这种文件不能被平台直接执行,必须要经过java解释器解释执行。Java程序的执行过程必须先经过先编译、后解释两个步骤。
这里写图片描述
Java语言里负责解释执行字节码文件的是java虚拟机,也就是平常所说的JVM(Java Virtual Machine)。JVM是可以运行java字节码文件的虚拟计算机。所有平台的JVM面向编译器提供相同的编程接口,而编译器只需要面向虚拟机生成能够被JVM识别的代码(也就是字节码文件),然后由虚拟机来解释执行。在有些虚拟机的实现中,还会将一些虚拟机代码直接转换成特定系统的机器码执行,从而提升执行效率。
当使用java编译器编译java程序时,生成的是与平台无关的字节码文件,这些字节码只面向JVM,不面向特定平台。不同平台的JVM是不同的,但他们都给java编译器提供了相同的接口。JVM是java跨平台的关键部分,只要为不同平台上实现了相应的虚拟机,编译后的java字节码文件就可以在该平台上的虚拟机上执行。显然,相同的字节码文件在不同的平台上运行一样几乎是不可能的,只有通过JVM这个转换器。
JVM是一个抽象的计算机,和实际的计算机一样,他具有指令集并且拥有不同的存储区域。它负责执行指令,还要管理数据、内存以及寄存器。
Oracle为JVM的实现提供了统一标准。具体定义了JVM的如下几个细节:
指令集
寄存器
类文件的格式

垃圾回收堆
存储区

猜你喜欢

转载自blog.csdn.net/k1234o/article/details/80561842
今日推荐