91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

opcode cache與JIT之間的區別是什么

發布時間:2020-09-09 10:30:12 來源:億速云 閱讀:195 作者:小新 欄目:編程語言

小編給大家分享一下opcode cache與JIT之間的區別是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

要說明opcode cache與JIT的區別,得先明白,字節碼,又叫中間碼與機器碼的區別

操作碼(opcode)

一條機器指令。比如我們匯編語言寫的一條操作語句。

機器碼(machine code)

學名機器語言指令,有時也被稱為原生碼(Native Code),是電腦的CPU可直接解讀的數據

機器碼是電腦CPU直接讀取運行的機器指令,運行速度最快,但是非常晦澀難懂,也比較難編寫,一般從業人員接觸不到。

而且機器碼不支持跨平臺,簡單點將就是不同的CPU使用的機器碼是不一樣的。

字節碼(bytecode)

是一種包含執行程序、由一序列 op 代碼/數據對 組成的二進制文件。字節碼是一種中間碼,它比機器碼更抽象,需要直譯器轉譯后才能成為機器碼的中間代碼。

字節碼主要為了實現特定軟件運行和軟件環境、與硬件環境無關。字節碼的實現方式是通過編譯器和虛擬機器。編譯器將源碼編譯成字節碼,特定平臺上的虛擬機器將字節碼轉譯為可以直接執行的指令。字節碼的典型應用為Java bytecode,那PHP的就是一系列opcode組成的二進制文件。

字節碼在運行時通過虛擬機(JAVA的JVM,PHP的Zend虛擬機)做一次轉換, 生成機器指令, 因此能夠更好的跨平臺運行。

字節碼是一種中間狀態(中間碼)的二進制代碼(文件)。需要直譯器轉譯后才能成為機器碼。

通過介紹我們可以看到,CPU只能執行機器碼,但為了實現應用跨硬件平臺,我們就為不同的編程語言實現了一個虛擬機,而這個虛擬機將我們寫的代碼編譯成二進制代碼(文件),這個二進制代碼就叫字節碼,也叫中間碼。Zend虛擬機編譯好的字節碼就叫opcode(其實是一系列opcode)。

接下來咱們再介紹opcode cache與JIT。

JIT

目前PHP還沒有引入JIT技術,不過鳥哥說在下一個大版本的 PHP 可能帶來JIT新特性。讓我們拭目以待吧!不過JIT在JAVA生態中是很成熟的技術了,所以就說說JAVA的JIT。

JIT 是 just in time 的縮寫, 也就是即時編譯編譯器。使用即時編譯器技術,能夠加速 Java 程序的執行速度。

通常通過 javac 將程序源代碼編譯,轉換成 java 字節碼,JVM 將字節碼其翻譯成對應的機器指令(機器碼),逐條讀入,逐條解釋翻譯。很顯然,經過解釋執行,其執行速度必然會比可執行的二進制字節碼程序慢很多。為了提高執行速度,引入了 JIT 技術。

JIT 把翻譯過的機器碼保存起來,以備下次使用(這里面肯定有個類似與LRU的算法)。可見JIT要做的很簡單,就是把中間碼翻譯成的機器碼暫時(保存多久,怎么選擇這里不做介紹)保存起來,這樣再用到這個機器碼的時候,就少了一次翻譯。

opcode cache

光聽名字就知道,就是將中間碼(一系列opcode組成的二進制文件)緩存起來,引用官網的話:OPcache improves PHP performance by storing precompiled script bytecode in shared memory, thereby removing the need for PHP to load and parse scripts on each request.

那說說為什么需要opcode cache?

PHP代碼的生命周期

從PHP解析器執行一個PHP腳本,到輸出腳本內容,主要經歷五個步驟:Zend引擎讀取文件,詞法分析,語法分析與語義分析、創建要中間碼,執行中間碼,如下圖

opcode cache與JIT之間的區別是什么

每一次請求PHP腳本都會執行一遍以上步驟。如果PHP代碼沒有變化,那么opcode也不會變化,顯然沒有必要每次都生成opcode,于是我們可以把編譯好的opcode緩存下來,以后如果PHP代碼沒有變,就直接訪問緩存中編譯好的opcode。

啟用opcode緩存之后的流程圖如下所示:

opcode cache與JIT之間的區別是什么

總結

簡單點描述JAVA的JIT是用來緩存CPU執行的機器碼的,opcode cache是用來緩存Zend虛擬機用的中間碼的。

以上是opcode cache與JIT之間的區別是什么的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

刚察县| 崇文区| 隆回县| 西林县| 镇远县| 文昌市| 信丰县| 嵊州市| 锡林浩特市| 恩平市| 磐安县| 元氏县| 平南县| 鄱阳县| 嵩明县| 扎鲁特旗| 宁南县| 高碑店市| 汉寿县| 安龙县| 昭通市| 收藏| 西乌珠穆沁旗| 银川市| 子长县| 阿拉尔市| 紫云| 习水县| 保山市| 蒙山县| 萍乡市| 海伦市| 印江| 新化县| 潍坊市| 安远县| 堆龙德庆县| 手游| 长沙市| 右玉县| 咸丰县|