1、Java语言概述与开发环境——Java程序运行机制

Java语言是一种特殊的高级语言,它既有解释型语言的特性,也具有编译型语言的特征,因为Java要经过先编译后解释两个步骤。

 一、高级语言的运行机制

  计算机高级语言按程序的执行方式可以分为编译型和解释型两种 。

1.1 编译型语言

  编译型语言是指使用专门的编译器,针对特定平台(操作系统)将某种高级语言源代码一次性"翻译"成可被该平 台硬件执行的机器码(包括机器指令和操作数),并包装成该平台所能识别的可执行性程序的格式,这个转换过程称为编译 CCompile ) 。 编译生成的可执行性程序可以脱离开发环境,在特定的平台上独立运行 。

  有些程序编译结束后,还可能需要对其他编译好的目标代码进行链接,即组装两个以上的目标代码模块生成最终的可执行性程序,通过这种方式实现低层次的代码复用 。

优点:因为编译型语言是一次性地编译成机器码,所以可以脱离开发环境独立运行,而且通常运行效率较高 ;

缺点:因为编译型语 言 的程序被编译成特定平台上的机器码,因此编译生成的可执行性程序通常无法移植到其他平台上运行;如果需要移植,则必须将源代码复制到特定平台上,针对特定平台进行修改,至少也需要采用特定平台上的编译器重新编译 。

现有的 C、 C++、 Objective-C、 Swift、 Kotlin 等高级语言都属于编译型语言。

1.2 解释型语言

  解释型语言是指使用专门的解释器对程序逐行进行解释成特定平台的机器码并立即执行的语言。解释型语言不会进行整体性的编译和链接处理,解释型语言相当于把编译型语言的编译和解释过程混合到一起同时完成。

优点:跨平台比较容易,只需提供特定平台的解释器即可,每个特定平台上的解释器负责将源程序解释成特定平台的机器指令即可 。 解释型语言可以方便地实现源程序级的移植,但这是以牺牲程序执行效率为代价   。

缺点:每次执行解释型语言 的程序都需要进行一次编译,因此解释型语言 的程序运行效率通常较低,而且不能脱离解释器独立运行 。

现有的JavaScript、Ruby、Python等语言都是属于解释型语言。

二、Java程序的运行机制

Java语言两种核心机制:

java虚拟机(Java Vertal Machine),JVM

垃圾回收机制(Garbage Collection),GC

2.1 Java虚拟机

  Java 语言比较特殊,由 Java 语言编写的程序需要经过编译步骤,但这个编译步骤并不会生成特定平台的机器码,而是生成一种与平台无关的字节码(也就是*.class 文件) 。 当然,这种字节码不是可执行的,必须使用 Java 解释器来解释执行 。 因此可以认为 : Java 语言既是编译型语言 ,也是解释型语言。或者说, Java 语言既不是纯粹的编译型语言,也不是纯粹的解释型语言 。 Java 程序的执行过程必须经过先编译、后解释两个步骤,如图 所示 。

 

 

  Java 语言里负责解释执行字节码文件的是 Java 虚拟机,即 JVM( Java Virtual Machine) 。JVM是可运行 Java 字节码文件的虚拟计算机。所有平台上的 JVM向编译器提供相同的编程接口 , 而编译器只需要面向虚拟机,生成虚拟机能理解的代码 , 然后由虚拟机来解释执行 。 在一些虚拟机的实现中,还会将虚拟机代码转换成特定系统的机器码执行 , 从而提高执行效率。

  当使用 Java 编译器编译 Java 程序时,生成的是与平台无关的字节码 , 这些字节码不面向任何具体平台,只面向 JVM。 不同平台上的 JVM 都是不同的,但它们都提供了相同的接口 。 JVM是 Java 程序跨平台的关键部分,只要为不同平台实现了相应的虚拟机,编译后的 Java 字节码就可以在该平台上运行 。 显然,相同的宇节码程序需要在不同的平台上运行,这几乎是"不可能的",只有通过中间的转换器才可以实现,JVM就是这个转换器 。

  JVM 是一个抽象的计算机 , 和实际的计算机一样,它具有指令集并使用不同的存储区域 。 它负责执行指令,还要管理数据、内存和寄存器 。 

2.2 垃圾回收机制

对于不再使用的内存应回收——垃圾回收:

在C和C++等语言,由程序员负责回收无应用的内存。

Java语言消除了程序员回收无用内存的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放哪些可被释放的内存空间。

垃圾回收在Java程序运行过程中,自动进行,程序员无法精确控制和干预。 

原文地址:https://www.cnblogs.com/weststar/p/11978238.html