<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>JIT on Leanku 的博客</title><link>https://www.leanku.com/tags/jit/</link><description>Recent content in JIT on Leanku 的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 22 Jun 2025 20:46:01 +0800</lastBuildDate><atom:link href="https://www.leanku.com/tags/jit/index.xml" rel="self" type="application/rss+xml"/><item><title>PHP8新特性：JIT</title><link>https://www.leanku.com/post/php/php8%E6%96%B0%E7%89%B9%E6%80%A7jit/</link><pubDate>Sun, 22 Jun 2025 20:46:01 +0800</pubDate><guid>https://www.leanku.com/post/php/php8%E6%96%B0%E7%89%B9%E6%80%A7jit/</guid><description>&lt;h1 id="php8新特性jitjust-in-time"&gt;PHP8新特性：JIT（Just-In-Time）&lt;/h1&gt;&#10;&lt;h2 id="一jitjust-in-time编译技术概述"&gt;一、JIT（Just-In-Time）编译技术概述&lt;/h2&gt;&#10;&lt;h3 id="11-什么是jit编译"&gt;1.1 什么是JIT编译&lt;/h3&gt;&#10;&lt;p&gt;JIT（Just-In-Time）编译是一种动态编译技术，它在程序运行时将字节码或中间代码编译为机器码执行，而不是预先编译（AOT，Ahead-Of-Time）或纯粹解释执行。PHP 8.0首次引入了JIT编译器，这是PHP性能演进史上的重要里程碑。&lt;/p&gt;&#10;&lt;h3 id="12-php执行模式的演进"&gt;1.2 PHP执行模式的演进&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;解释执行模式（PHP 5.x及之前）：&#10;&lt;ul&gt;&#10;&lt;li&gt;每次请求都需要解析、编译和执行&lt;/li&gt;&#10;&lt;li&gt;无任何形式的持久化缓存&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;OPCache缓存模式（PHP 5.5+）：&#10;&lt;ul&gt;&#10;&lt;li&gt;缓存预编译的opcode&lt;/li&gt;&#10;&lt;li&gt;减少重复编译开销&lt;/li&gt;&#10;&lt;li&gt;但仍需解释执行opcode&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;JIT编译模式（PHP 8.0+）：&#10;&lt;ul&gt;&#10;&lt;li&gt;将热代码（频繁执行的代码）编译为机器码&lt;/li&gt;&#10;&lt;li&gt;直接执行机器码，绕过解释器&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="13-jit带来的性能提升"&gt;1.3 JIT带来的性能提升&lt;/h3&gt;&#10;&lt;p&gt;根据官方基准测试，JIT在某些计算密集型工作负载上可带来：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;数学运算：1.5-3倍提升&lt;/li&gt;&#10;&lt;li&gt;字符串处理：1.2-2倍提升&lt;/li&gt;&#10;&lt;li&gt;框架综合性能：10-30%提升&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;注意：JIT对I/O密集型应用（如纯数据库CRUD）提升有限&lt;/p&gt;&#10;&lt;h2 id="二php-jit工作原理"&gt;二、PHP JIT工作原理&lt;/h2&gt;&#10;&lt;h3 id="21-php脚本执行流程"&gt;2.1 PHP脚本执行流程&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;PHP源代码&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;Zend编译器 (生成opcode)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;OPCache (缓存opcode)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;Zend VM解释执行&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;JIT编译器 (追踪热代码)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;生成机器码&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;直接执行机器码&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="22--jit编译流程"&gt;2.2 JIT编译流程&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;代码追踪：&#10;&lt;ul&gt;&#10;&lt;li&gt;监控执行过程中的热代码（频繁执行的代码路径）&lt;/li&gt;&#10;&lt;li&gt;默认阈值：执行次数超过3次触发JIT编译&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;编译优化：&#10;&lt;ul&gt;&#10;&lt;li&gt;寄存器分配&lt;/li&gt;&#10;&lt;li&gt;循环优化&lt;/li&gt;&#10;&lt;li&gt;死代码消除&lt;/li&gt;&#10;&lt;li&gt;内联函数调用&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;机器码生成：&#10;&lt;ul&gt;&#10;&lt;li&gt;针对当前CPU架构生成优化后的机器码&lt;/li&gt;&#10;&lt;li&gt;支持x86和ARM架构&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;执行切换：&#10;&lt;ul&gt;&#10;&lt;li&gt;后续执行直接跳转到机器码&lt;/li&gt;&#10;&lt;li&gt;绕过Zend虚拟机解释器&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="23-jit与opcache的关系"&gt;2.3 JIT与OPCache的关系&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;协同工作：&#10;&lt;ul&gt;&#10;&lt;li&gt;OPCache是JIT的基础&lt;/li&gt;&#10;&lt;li&gt;JIT只编译OPCache中缓存的opcode&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;内存管理：&#10;&lt;ul&gt;&#10;&lt;li&gt;JIT使用OPCache的共享内存存储机器码&lt;/li&gt;&#10;&lt;li&gt;opcache.jit_buffer_size控制JIT内存池大小&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="三php-jit配置与使用"&gt;三、PHP JIT配置与使用&lt;/h2&gt;&#10;&lt;h3 id="31-启用jit"&gt;3.1 启用JIT&lt;/h3&gt;&#10;&lt;p&gt;在php.ini中配置：&lt;/p&gt;</description></item></channel></rss>