编译:将代码转化为计算机可以执行的二进制指令。
编译型语言和解释型语言的定义。
定义:
编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。
解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!
特点:
编译型语言,执行速度快、效率高;依靠编译器、跨平台性差。
解释型语言,执行速度慢、效率低;依靠解释器、跨平台性好。
举例:
编译型的语言包括:C、C++、Delphi、Pascal、Fortran
解释型的语言包括:Java、Basic、javascript
有人说Java是编译型语言,因为所有的Java代码都是要编译的,.java文件不经过编译就无法执行。 也有人说Java是解释型的,因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型的。
对于C和C++,它们经过一次编译之后,可以由操作系统直接执行,所以它们是编译型语言。而Java不一样,它首先由编译器编译成.class(字节码)文件,然后在通过JVM从.class文件中读一行解释执行一行,虽然进行了编译,但是没有编译成机器可以直接执行的指令,所以它实质上是解释型的语言。也正是由于java对于多种不同的操作系统有不同的JVM,所以实现了真正意义上的跨平台。
(1)Java语言的编译-->解释-->运行过程
(2)JVM
现在的JVM为了效率,都做了一些JIT优化。它会把.class的二进制代码编译为本地的代码直接运行,如hotspot VM。什么是HotSpot Vm?
那么什么是JIT?
简介:
在主流商用JVM(HotSpot、J9)中,Java程序一开始是通过解释器(Interpreter)进行解释执行的。当JVM发现某个方法或代码块运行特别频繁时,就会把这些代码认定为“热点代码(Hot Spot Code)”,然后JVM会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为:即时编译器(Just In Time Compiler,JIT)。在运行时JIT会把编译过来的机器码保存起来,运行时再遇到这类代码直接可以执行,而不是先解释后执行。JIT编译器是“动态编译器”的一种(运行时编译),相对的“静态编译器”则是指的比如:C/C++的编译器。
详细: