即时编译(英语:Just-in-time compilation),又译及时编译、实时编译,
动态编译的一种形式,是一种提高
程序运行效率的方法。
动态编译是某些
程式语言在执行时用来增进效能的方法。尽管这技术源于
Self,但使用此技术最为人所知的是
Java。此技术可以做到一些只在执行时才能完成的最佳化。使用动态编译的执行环境一开始执行速度较慢,之后,完成大部分的编译和再编译后,会执行得比非动态编译程式快很多。因为初始化时的效能延迟,动态编译不适用于一些情况。在许多实作中,一些可以在编译时期做的最佳化被延到执行时期才编译,导致不必要的效能降低。即时编译是一种动态编译的形式。
一个非常近似的技术是递增式编译。递增式编译器用于POP-2、POP-11、一些
Lisp的版本,如Maclisp和最少一种版本的
ML语言(PoplogML)。这需要编程语言的编译器成为执行环境的一部分作为要件以实作。如此便得以在任何时候从终端、从档案、或从执行中程式所建造数据结构中读取源码。然后,转成机器码区块或函数(有可能取代之前同名的函数),之后可立即被程式使用。因为执行中对互动开发和测试的速度的要求,编译后的机器码所做的最佳化程度不如标准“批次编译器”。然而,递增式编译过的程式跑起来通常比同一个程式的一般解译版本还快。递增式编译因而能够同时提供编译和解译语言优点。 为了增加可移植性,递增式编译通常采两步骤。第一个步骤会编译到中间、与平台独立的语言,然后再到机器码。在这个例子中,移植只须改变“后端”编译器。不同于动态编译,递增式编译在程式执行后不会做更进一步的最佳化。
它主要的目的是将便于人编写、阅读、维护的高级计算机语言所写作的
源代码程序,翻译为计算机能解读、运行的低阶机器语言的程序,也就是
可执行文件。编译器将原始程序(source program)作为输入,翻译产生使用目标语言(target language)的等价程序。
源代码一般为高级语言(High-level language),如Pascal、C、C++、C# 、Java等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。
源代码(source code)→
预处理器(preprocessor)→
编译器(compiler)→
汇编程序(assembler)→
目标代码(object code)→
链接器(Linker)→
可执行文件(executables), 最后打包好的文件就可以给计算机去判读运行了。