JIT 即時編譯的運做原理

JITphp

just-in-time,被翻譯爲即時編譯,要理解即時編譯我以爲和普通的編譯(C,C++等靜態語言)相對比即可理解,普通編譯能夠說是 all before runtime,在你運行程序前你須要提早把程序徹底編譯爲機器碼,而後載入運行。而即時編譯,並非在運行前就編譯好,而是在運行時,in runtime,對一些頻繁使用的代碼段,好比被常常調用的函數,循環段等編譯成機器碼,以使這些「熱區」無需重複性的被解釋器解釋來提升程序的執行效率。java

像 java 和 php 7.0:函數

java 會經過 javac 字節碼編譯器將代碼編譯成 byteCode,運行時經過 JVM 載入 byteCode 進行解釋執行,同時會將「熱區」代碼段發送給 JIT 編譯器,JIT 會將這些代碼編譯成機器語言已被後期直接調用運行,無需再被解釋器解釋執行,從而提升執行效率。spa

PHP 7.0 的 JIT 也與之相同,php 是將 zend 預編譯器編譯好的 opcode 發送給 ZendVM 進行解釋執行,同時會將 「熱區」 代碼段發送給 JIT 編譯器,JIT 會將這些代碼編譯成機器語言已被後期直接調用運行,無需再被解釋器解釋執行,從而提升執行效率。翻譯

相對於普通的靜態編譯,JIT 是動態的,它會在執行中來動態的將某些熱區代碼段編譯爲機器代碼,而不像靜態編譯在運行前就已經編譯完成,固然這只是 JIT 的最基礎的運做機制,還有不少高深的知識點請你們自行補腦code

相關文章
相關標籤/搜索