- 高级语言-> 机器代码:
- 高级语言-> 字节码 ->机器代码
2.1 java
java 在执行过程中先利用javac将源文件编译成.class字节码,然后在jvm上继续解释和编译成可执行的机器代码。你可能注意到在jvm过程中同时有编译和解释的过程,这是跟jvm运行机制有关:
JVM有三种运行模式:解释模式,编译模式,混合模式。上图对应的是混合模式,其流程为:
1.源代码经过编译器成为.class文件,也就是字节码。
2.程序字节码经过JIT判断,是否属于热点代码,例如循环或者频繁调用的方法。
3.如果是,被JIT编译成机器字节码,对应具体硬件处理器(如sparc,intel)。
4.如果不是,被JIT解释器解释执行。
所以JIT是一个解释器和编译器的集合,某些“热点代码”可以通过编译来节省逐条解释的耗时,其他代码仍旧通过解释器执行。
2.2 python
py文件被编译成.pyc 字节码文件。这个字节码文件跟平台无关。接下来由pvm解释执行这个字节码文件,每一次负责将一条字节码文件语句翻译成cpu可以直接执行的机器代码,然后在接下来下一句。
对于python来说,没有针对机器代码的编译,每一条语句的执行都是直接对源代码或者中间代码进行解释运行。而少了这个编译的过程,使得解释型语言运行较慢。另外,在逐条解释的过程中,效率也较低。
来源:CSDN
作者:浅笑不再
链接:https://blog.csdn.net/weixin_45339760/article/details/103605687