搜索
写经验 领红包

java解释器和编译器的区别(jdk编译器和解释器)

导语:JVM底层原理之解释器和编译器的区别

JVM底层原理之解释器和编译器的区别

什么是解释器?什么是编译器?

解释器(Interpreter):

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

java虚拟机(jvm)启动时,会根据预定义的规范对字节码采用逐行解释的方式执行,也就是将字节码文件中的每条内容都翻译成系统能识别的指令并执行。

注意这里是直接执行,并没有编译出什么文件(就算有也是部分临时的),相当于实时翻译并执行。

编译器(Compiler):

编译器负责把一种编程语言(通常为高级语言)“翻译”成另外一种语言(通常为低级语言),后者往往是二进制的形式的机器语言,被称为目标代码(object code),这个转换的过程通常的目的是生成可执行的程序。

在java中,将.java编译为.class文件就是编译器的一种操作。而如果我们又将.class编译成计算机CPU可以直接执行的机器语言,那这就也是编译操作了。

注意这里并没有执行,只负责完整、彻底的翻译,然后生成翻译后的文件,并没有任何执行的操作。

为什么Java是半编译半解释语言

关于这个,有两种说法,我觉得都挺有道理

①先编译后解释

编译型语言是将源码编译成机器指令的文件,直接就可以执行,C/C++就是这种。而java也是通过编译将源码java文件编译成字节码文件(.class),所以它显然具有编译的特点。

解释型语言是在运行时一句一句的读取源码,一边翻译成机器指令一边执行。而java在运行时也是通过jvm读取字节码文件,一边翻译一边解释成机器指令并执行,所以它显然也具有解释的特点。

所以java是半编译半解释型语言。

②一边解释一边编译

jvm支持一种叫即时编译的技术,它被称之为:JIT(Just in time compiler)编译器。也就是jvm不仅仅有解释器的作用,它其实还有编译器的作用。

jvm在执行java程序时,通常会将解释执行和编译执行二者结合起来进行,也就是一边解释一边编译。

所以java是半编译半解释型语言。

这两种说法,我认为都很有道理,而且我们也无需钻牛角尖非要探究Java被这样叫的原因,因为这已经是事实了。

而且,更重要的是JIT,这玩意又是个啥?我们下期再讲……

免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小莉创作整理编辑!