JIT,just-in-time compilation
JIT(just-in-time compilation,即时编译)指计算机领域里,即时编译也被称为动态翻译(dynamic translation),是一种通过在运行时将字节码翻译为机器码,从而改善字节码编译语言性能的技术。即时编译前期的两个运行时理论是字节码编译和动态编译。
在编译为字节码的系统如 Limb 编程语言,Smalltalk,UCSD P-System, Perl,GNU CLISP,和 Java 的早期版本中, 源代码被翻译为一种中间表示即字节码。 字节码不是任何特定计算机的机器码, 它可以在多种计算机体系中移植。 字节码被解释着运行在虚拟机里。
动态编译环境是一种在执行时使用编译器的编译环境。 例如, 多数 Common Lisp 系统有一个编译函数,他可以编译在运行时创建的函数。
在即时编译环境下, 字节码的编译是第一步, 它将源代码递归到可移植和可优化的中间表示。字节码被部署到目标系统。 当执行代码时,运行时环境的编译器将字节码翻译为本地机器码。 基于每个文件或每个函数:函数仅仅在他们要被执行时才会被编译。
目标是要组合利用本地和字节码编译的多种优势:多数重量级的任务如源代码解析和基本性能的优化在编译时处理,将字节码编译为机器码比起从源代码编译为机器码要快得多。部署字节码是可移植的,而机器码只限于特定的系统结构。从字节码到机器码编译器的实现更容易,因为大部分工作已经在实现字节码编译器时完成。
from:http://zh.wikipedia.org/wiki/JIT
在Java编程语言和环境中,just-in-time(JIT)编译器是一个把Java的字节码(包括需要被解释的指令的程序)转换成可以直接发送给处理器的指令的程序。当你写好一个Java程序后,源语言的语句将由Java编译器编译成字节码,而不是编译成与某个特定的处理器硬件平台对应的指令代码(比如,Intel的Pentium微处理器或IBM的System/390处理器)。字节码是可以发送给任何平台并且能在那个平台上运行的独立于平台的代码。
过去,大多数用任何语言写的程序在每个电脑平台上都必须重编译,甚至有时需要重写。Java最大的优点之一就是你只需要写和编译一次程序。在任何平台上,Java都会将编译好的字节码解释成能被特定的处理器所理解的指令。尽管如此,Java虚拟机一次只能处理一条字节码指令。在特定的系统平台上使用 Java Just-in-time编译器(实际上是第二个编译器)能把字节码编译成特定系统的代码(虽然这个程序最初已经在这个平台上被编译过)。一旦代码被 JIT编译器(重)编译后,它在电脑上通常就会运行地更快。
just-in-time编译器随虚拟机一起供给的,并可选使用。它把字节码编译成可立即执行的指定平台的可执行代码。Sun微系统建议,选择JIT编译器选项通常会使程序运行地更快,尤其是当某个可执行的方法被重复使用时。
from : http://www.4oa.com/whatis/sort03158/238837.html
在Java和MS.net Framework中,Just-In-Time编译器所扮演的角色是一个中介者,负责代码翻译和安全检查的任务。 在Java或C#等高级语言中,程序员编写的源代码首先被编译种某种格式的中间语言IL(Intermediate Language),IL是一种类似汇编语言,与汇编不同的是,IL运行的是在一个虚拟的机器环境中,或叫做虚拟机,汇编语言运行在一个特定的机器平台中。虚拟机的好处为中间语言提供了一个与平台无关的环境,比如java虚拟机,和CLR(Common Language Runtime),它能够根据所在的平台架构将中间语言翻译中这个平台上的机器语言,从而完成程序的执行过程。担任翻译任务的就是虚拟机中配备的 JIT(Just In Time)编译器。与传统编译器不同的是,JIT编译器是边执行边解释,只有需要执行的代码才被翻译成机器语言,那些不会执行到代码被忽略掉的。 JIT编译器担任的第二项任务是检查代码的安全性。它必须保证编译出来的机器代码是安全,即程序不会非法访问不属于本身的内存空间或者没有权限访问的空间,这样可以防止恶意的程序修改敏感数据区域。 此外,JIT编译器提供了对代码优化的可选功能。 下图是Java应用程序的一个程序过程,JIT编译器是JVM的一个组成部分。 参考资料: [1] Microsoft MSDN, Compiling MSIL to Native code. [2] Simon Robinson, etc. Professional C# [...]
vincent代码阅读
基本看了一遍vincent的代码,发现他是针对arm专门做优化的opengl-es的实现。其中使用了runtime code generation 编译方法生成优化的ARM CODE,做提速。看来我得找找以前的版本,看能否跳过这块。
