快捷搜索:  汽车  科技

java运行机制代码(浅析Java程序语言的运行机制)

java运行机制代码(浅析Java程序语言的运行机制)Java 语言相对于独立的解释型和编译型, 又有一些不一样。区别在于编程器编译的不是最终可以运行的机器语言, 而是能够运行在 Java 虚拟机 ( JVM: Java Virtual Machine)中的字节码。Java 虚拟机只要是用来运行 Java字节码文件的虚拟机。不同的平台上编译器提供了统一的编程接口,而 Java 编译器只需要面向 Java 虚拟机, 生成虚拟机能够运行的代码。 然后由 Java 虚拟机解释执行,并且在虚拟机中把代码转换成平台能够识别的机器码来运行程序, 从而做到了一次编译, 多个平台运行的跨平台特性。为了改善编译语言的效率而发展出的即时编译技术,已经缩小了这两种语言间的差距。这种技术混合了编译语言与解释型语言的优点,它像编译语言一样,先把程序源代码编译成字节码。到运行期时,再将字节码直译,之后运行。Java 与 LLVM 是这种技术的代表产物。这类型的编程语言,

JAVA 程序语言的运行机制

Java 是一门高级语言,它既包含解释型语言的特征, 也具有编译型语言的特征。因为 Java 应用程序是需要先经过编译,再进行解释两个步骤。

解释型和编译型

计算机按照程序的执行方式可以分为解释型和编译型。

解释型语言(Interpreted language)

这种类型的编程语言,会将代码一句一句直接运行,不需要像编译语言(Compiled language)一样,经过编译器先行编译为机器代码,之后再运行。这种编程语言需要利用解释器,在运行期,动态将代码逐句解释(interpret)为机器代码,或是已经预先编译为机器代码的子程序,之后再运行。

java运行机制代码(浅析Java程序语言的运行机制)(1)

理论上,任何编程语言都可以是编译式,或解释型的。它们之间的区别,仅与程序的应用有关。许多编程语言同时采用编译器与解释器来实现,其中包括 Lisp,Ruby,JavaScript 与 Python。JAVA 及 C# 采用混合方式,先将代码编译为字节码,在运行时再进行解释。

编译型语言(Compiled language)

这类型的编程语言,通过编译器来实现。它不像解释型语言一样,由解释器将代码一句一句运行,而是以编译器,先将代码编译为机器代码,再加以运行。理论上,任何编程语言都可以是编译式,或直译式的。它们之间的区别,仅与程序的应用有关。

java运行机制代码(浅析Java程序语言的运行机制)(2)

两者的优缺点

一般而言,用编译语言写成的程序,在运行期的运行速度,通常比用解释型语言写的程序快。因为程序在编译期,已经被预先编译成机器代码,可以直接运行,不用像解释型语言一样,还要多一道直译程序。

但是要先进行编译,之后才能运行程序,这也造成了编译语言的缺点。一般而言,编译语言的程序开发速度,以及调试时间,都是比较长的。因为它不像解释型语言可以写完一行,或一小段程序之后,马上运行,马上调试。解释型语言通常让程序开发的整体时间变少,在开发过程中,程序开发人员也可以更弹性、快速的测试自己的想法。

为了改善编译语言的效率而发展出的即时编译技术,已经缩小了这两种语言间的差距。这种技术混合了编译语言与解释型语言的优点,它像编译语言一样,先把程序源代码编译成字节码。到运行期时,再将字节码直译,之后运行。Java 与 LLVM 是这种技术的代表产物。

Java 的运行机制和 JVM

Java 语言相对于独立的解释型和编译型, 又有一些不一样。区别在于编程器编译的不是最终可以运行的机器语言, 而是能够运行在 Java 虚拟机 ( JVM: Java Virtual Machine)中的字节码。Java 虚拟机只要是用来运行 Java字节码文件的虚拟机。不同的平台上编译器提供了统一的编程接口,而 Java 编译器只需要面向 Java 虚拟机, 生成虚拟机能够运行的代码。 然后由 Java 虚拟机解释执行,并且在虚拟机中把代码转换成平台能够识别的机器码来运行程序, 从而做到了一次编译, 多个平台运行的跨平台特性。

流程大概如下:

java运行机制代码(浅析Java程序语言的运行机制)(3)

这里 JVM 也就是 Java 虚拟机中介的概念。 原先你要去租房, 你有一个要租房的“需求”(源代码), 而每个房东都是你的“运行”环境。 没看一次房子都需要单独的找到对应房子的房东进行 “租”(编译) 的过程。 这个时候, 有个房屋托管(虚拟机)说, 你不要找房东了太麻烦, 我这有这个区的“房源”, 你来找我就好, 这样你以后租房子就可以只找这个中介就可以看这个区的房子, 这样的话, 你不用来回和不同的房东打交道, 你也不需要知道这些房东是男是女, 是好说话还是不好说话。 但是既然是中间打的交道, 就需要有一些性能的损耗(佣金)。并且你能看多少套房子,就取决于中介有多少房源。 也就是 Java 虚拟机能在那运行, 你的程序就可以在那运行。

JVM

JVM 是 Java Virtual Machine 的缩写。它是一种基于计算设备的规范,是一台虚拟机,即虚构的计算机。

JVM屏蔽了具体操作系统平台的信息(显然,就像是我们在电脑上开了个虚拟机一样),当然,JVM 执行字节码时实际上还是要解释成具体操作平台的机器指令的。

通过 JVM,Java 实现了平台无关性,Java 语言在不同平台运行时不需要重新编译,只需要在该平台上部署 JVM 就可以了。因而能实现一次编译多处运行。(就像是你的虚拟机也可以在任何安了 VMWare 的系统上运行)。

JVM结构
  • 程序计数器(Program Counter)
  • Java堆(Heap)
  • Java虚拟机栈(Stack)
  • 本地方法栈(Native Stack)
  • 方法区(Method Area)

猜您喜欢: