Java是解释执行吗

解释型语言

所谓解释型语言就是解释器对代码进行逐条解释,解释成本地机器代码然后直接运行

编译型语言

所谓编译型语言就是在程序运行之前,将代码提前编译成本地机器代码。

JIT编译技术

以前不是很懂JIT和解释型语言的区别,一直以为JIT就是解释型语言。其实JIT是在程序运行时将代码逐条编译成本地机器代码,看似和解释型语言的定义没啥区别,但是JIT最重要的是加了个缓存。根据程序的局部性原理,代码会被多次循环调用,JIT所做的就是将逐条解释编译成的机器代码存入缓存中,当再次对相同语句进行编译的时候直接从缓存中调用。因为局部性原理,所以性能不会有什么损失。

Java是解释执行吗

以前一直以为Java是编译型语言,因为从.java文件到.class文件需要一个编译的过程。

看了许多回答,其实大家对解释型语言和编译型语言都有着不同的见解。我觉得对于语言类型的定义并不重要,了解语言的本质才是精髓。

上文提到编译型语言,当编译型语言的程序生成了目标文件,这个目标文件是本地机器能直接运行的文件,它是针对cpu而言的,因为硬件本身的差异,编译型语言的程序当需要在另外一种cpu上面运行的时候,这个程序必须要重新编译。

这里我就直接定义为编译型语言就是在运行之前将程序直接编译成本机机器码的语言,如C,C++等。

而对于py,java这些语言来说,可能也存在着一些编译的过程,就比如说Java中需要先将.java文件编译成.class文件,而对于本地机器,它是无法运行.class文件的,所以我们称之为解释语言。对于.java到.class的编译,它的目的就是将代码编译成统一平台(JVM)上能看得懂的代码,它是一种中间代码,不是本地机器代码,之所以java代码能Write once, run anywhere就是因为JVM这个中间层的存在,因为jvm屏蔽了操作系统和硬件的细节,它会将.class文件转换为本地机器可以执行的本地代码。

我们通常会把Java分为编译期和运行时,上述就是编译期。而运行时的时候,JVM会通过类加载器(Class-Loader)加载字节码,解释或者编译执行。

注意这里是解释或者编译执行,在主流Java版本Java8中它就是解释和编译混合的一种模式。

-------------本文结束感谢阅读-------------