解释执行与编译执行以及JIT的区别

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:12   2402   0

最近闲下来着手找工作,准备从头开始学一下java。看到解释执行和编译执行不是很理解二者区别,看到JIT的时候就更迷惑了,查阅资料写一下自己的理解。

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件翻译与执行是分开的,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;C,C++都是靠编译实现的。

解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,翻译与执行一次性完成,所以运行速度是不如编译后的程序运行的快的,但是就启动效率而言,解释执行的速度更快,因为它不需要进行编译过程。

总的来说,编译执行只需要最开始编译一次,之后每次运行时都不需要再编译,所以运行效率会很快;解释执行在每一次运行时都需要经过解释的过程,所以执行效率较低。

通俗一点,编译就是饭菜全部做好再吃,解释就相当于火锅,边涮边吃。

从内存使用方面来看,编译执行需要生成编译后的机器码文件,而解释执行时逐句解释执行,所以解释执行对内存占用更少。

Java程序也需要编译,但是没有直接编译称为机器语言,而是编译成为字节码,然后在JVM上用解释方式执行字节码。Python 的也采用了类似Java的编译模式,先将Python程序编译成Python字节码,然后由一个专门的Python字节码解释器负责解释执行字节码。

Java通过解释器解释执行字节码,这样的执行方式相对较慢,尤其是遇到一些运行频繁的代码块或者方法时。于是后来JVM引入了JIT即时编译器(just in time),当JVM发现某些代码运行频繁时就会认定为热点代码“hot spot code”,为了提高运行效率,就会把这些代码编译成为平台相关的机器码然后进行优化,JIT就是用来完成这项工作的。二者共同造就了java的优势——当程序需要迅速启动时,解释器首先发挥作用,省去编译时间,当程序运行时,编译器会逐渐将更多的代码编译成本地机器码从而获得更高的效率。

所以我的理解就是JAVA先编译(高级语言→字节码),后解释(字节码→机器码),在解释的过程中也可能进行编译(JIT编译热点代码)。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP