内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

opcodecache與JIT之間的區(qū)別是什么-創(chuàng)新互聯(lián)

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

目前創(chuàng)新互聯(lián)公司已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、延吉網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

要說明opcode cache與JIT的區(qū)別,得先明白,字節(jié)碼,又叫中間碼與機(jī)器碼的區(qū)別。

操作碼(opcode)

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

機(jī)器碼(machine code)

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

機(jī)器碼是電腦CPU直接讀取運(yùn)行的機(jī)器指令,運(yùn)行速度最快,但是非?;逎y懂,也比較難編寫,一般從業(yè)人員接觸不到。

而且機(jī)器碼不支持跨平臺,簡單點(diǎn)將就是不同的CPU使用的機(jī)器碼是不一樣的。

字節(jié)碼(bytecode)

是一種包含執(zhí)行程序、由一序列 op 代碼/數(shù)據(jù)對 組成的二進(jìn)制文件。字節(jié)碼是一種中間碼,它比機(jī)器碼更抽象,需要直譯器轉(zhuǎn)譯后才能成為機(jī)器碼的中間代碼。

字節(jié)碼主要為了實(shí)現(xiàn)特定軟件運(yùn)行和軟件環(huán)境、與硬件環(huán)境無關(guān)。字節(jié)碼的實(shí)現(xiàn)方式是通過編譯器和虛擬機(jī)器。編譯器將源碼編譯成字節(jié)碼,特定平臺上的虛擬機(jī)器將字節(jié)碼轉(zhuǎn)譯為可以直接執(zhí)行的指令。字節(jié)碼的典型應(yīng)用為Java bytecode,那PHP的就是一系列opcode組成的二進(jìn)制文件。

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

字節(jié)碼是一種中間狀態(tài)(中間碼)的二進(jìn)制代碼(文件)。需要直譯器轉(zhuǎn)譯后才能成為機(jī)器碼。

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

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

JIT

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

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

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

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

opcode cache

光聽名字就知道,就是將中間碼(一系列opcode組成的二進(jìn)制文件)緩存起來,引用官網(wǎng)的話: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解析器執(zhí)行一個PHP腳本,到輸出腳本內(nèi)容,主要經(jīng)歷五個步驟:Zend引擎讀取文件,詞法分析,語法分析與語義分析、創(chuàng)建要中間碼,執(zhí)行中間碼,如下圖

opcode cache與JIT之間的區(qū)別是什么

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

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

opcode cache與JIT之間的區(qū)別是什么

總結(jié)

簡單點(diǎn)描述JAVA的JIT是用來緩存CPU執(zhí)行的機(jī)器碼的,opcode cache是用來緩存Zend虛擬機(jī)用的中間碼的。

以上是opcode cache與JIT之間的區(qū)別是什么的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章名稱:opcodecache與JIT之間的區(qū)別是什么-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://www.rwnh.cn/article16/ddcggg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航品牌網(wǎng)站建設(shè)、ChatGPT電子商務(wù)、云服務(wù)器、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
海阳市| 枣阳市| 庆城县| 梨树县| 育儿| 那曲县| 贺州市| 北票市| 湟源县| 佛坪县| 筠连县| 定安县| 米林县| 青神县| 西贡区| 大姚县| 岳阳市| 安图县| 香港| 连城县| 克拉玛依市| 印江| 临海市| 裕民县| 清丰县| 玉环县| 常山县| 丹巴县| 台州市| 蕲春县| 新和县| 广灵县| 遵化市| 肥城市| 桂平市| 社旗县| 武冈市| 浦东新区| 昂仁县| 灌云县| 南安市|