天天看点

java中解释器和编译器

1、网友的解答

java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行,这就是上面提到的Java的特点的编译与解释并存的解释。

2、编译器是什么?

编译器是一种计算机程序,负责把一种编程语言(java)编写的源码(.java)转换成另外一种计算机代码(.class),后者往往是以二进制的形式被称为目标代码(object code)。这个转换的过程通常的目的是生成可执行的程序。

编译器的编译后是“另外一种代码”,这些编译后的代码是可执行的,如果还不能直接被执行,那么还需要再编译或再次解释,再交由计算机硬件执行。

3、解释器是什么?

(1)在计算机科学中,解释器是一种计算机程序,它直接执行由编程语言或脚本语言编写的代码,并不会把源代码预编译成机器码。

(2)一个解释器,通常会用以下的姿势来执行程序代码:分析源代码,并且直接执行。 把源代码翻译成相对更加高效率的中间码,然后立即执行它。 执行由解释器内部的编译器预编译后保存的代码 ,可以把解释器看成一个黑盒子,我们输入源码,它就会实时返回结果。 不同类型的解释器,黑盒子里面的构造不一样,有些还会集成编译器,缓存编译结果,用来提高执行效率(例如 Chrome V8 也是这么做的)。 解释器通常是工作在「运行时」,并且对于我们输入的源码,是一行一行的解释然后执行,然后返回结果。

4、总结

其实两种操作都是把“代码”各种转换后产生另外一种“代码”,区别就是产生的“代码”不一样。如下图:

java中解释器和编译器