JIT全称是Just-In-Time Compiler,意即即时编译器。JIT编译器能够将MSIL编译成为各种不同的机器代码以适应对应的系统平台,最终使得程序在目标系统中顺利运行。Zend宣布Zend JIT开源,源码地址已放到GitHub上。 事实上,JIT编译器分成两种:经济编译器和普通编译器。 经济JIT编译器 经济JIT编译器代表了运行一个.NET应用程序所需要的最少功能,它直接用对等的本机代码取代每一条MSIL指令,不进行任何优化从而也带来更少的系统负载。这也意味着它主要应用在内存等资源比较紧张的平台上。 普通JIT编译器 普通JIT编译器则是缺省的运行时配置,它会对其产生的代码进行即时优化。这样做无形中给予了.NET超出传统预编译语言的一个优点:预编译语言只能对其处理的代码将要运行于其上的平台做一番大致的事前估计。 JIT编译器可以经过准确调节达到当前运行时状态,结果可以完成一些预编译语言无法完成的工作:更高效地利用和分配CPU寄存器。在适当的情况下实施低级代码优化,比如常量重叠、拷贝复制、取消范围检查、取消常规副表达式以及方法内联等在代码执行期间监控当前的物理和虚拟内存需求从而更高效地利用内存产生特定的平台指令以准确、充分地利用实际的处理器模式.NET编译的结果就是JIT所带来的额外负载要求并没有产生显著的性能损失。 最近,Zend 宣布 Zend JIT 开源,源码地址已放到GitHub上,该分支包含 PHP JIT 的 PoC 概念实现,JIT 是 OPCache 的部分实现,不要求对 PHP 引擎进行任何修改,设计时 100% 兼容。JIT 使用 LLVM 后端,在 x86 和 x86_64 平台下测试通过。目前该项目还在体验阶段。 PHP 可通过如下参数进行配置和构建。LLVM 代码不稳定,因此版本间可能会有一些不兼容的问题。建议使用 LLVM 3.5 来避免兼容性问题。 构建 为了启用 JIT 需要在 opcache ini 指令增加新行:
配置
性能JIT 提供超过 5 倍的性能提升,一些如 Mandelbrot 的性能提升 30 倍。不幸的是 JIT 并没有提升真实应用的性能,同时 LLVM 编译时间也不适合运行时代码生成的。 转自:http://code.csdn.net/news/2824071 |