机器码,机器能懂,直接执行的一种二进制指令
字节码,是一种中间码,种包含执行程序,由一序列 op 代码/数据对组成的二进制文件
字节码一般与JVM联系在一起。
编译型语言
编译器
高级语言 --- 器码 ->运行,跨平台性不好,执行效率高,如C、C++、Pascal、Object-C
通过编译器(compiler)将源代码编译成机器码,之后执行。一般需编译(compile)、链接(linker)。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件。
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
解释型语言
解释器
高级语言 --- 机器码 ->运行,跨平台性好,执行效率低,如JavaScript、Python、Erlang、PHP、Perl、Ruby
解解释性语言在运行程序的时候逐行翻译。
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机JVM)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
混合型语言
既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕。
C#,C#在编译的时候编译成中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。
.net在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行。严格来说属于编译型语言
Java先生成字节码再在Java虚拟机中解释执行。严格来说属于解释型语言。
总结:两种都采取了中间策略,编译是在编译后采取该策略,抹去了编译环境的差异,为了实现跨平台应采取的是执行环境的跨平台。
解释是在解释前采取该策略,抹去了底层执行的差异,为了实现跨平台应采取的是编译器的跨平台。
解释器和编译器一般是用比该语言低级或同级(如Python可以C、Java等实现)的语言编写。机器码编译器->汇编语言编译器->c语言编译器...
转载于:https://www.cnblogs.com/ming-stu/p/10760003.html