JIT編譯器檢視原始碼討論檢視歷史
即時編譯器
JIT編譯器,英文寫作Just-In-Time Compiler,中文意思是即時編譯器。
JIT是一種提高程序運行效率的方法。通常,程序有兩種運行方式:靜態編譯與動態解釋。靜態編譯的程序在執行前全部被翻譯為機器碼,而動態解釋執行的則是一句一句邊運行邊翻譯。
- 中文名:JIT編譯器
- 外文名:Just-In-Time Compiler
- 含 義:即時編譯器
- 作 用;使程序跨平台運行
產品介紹
在Java編程語言和環境中,即時編譯器(JIT compiler,just-in-time compiler)是一個把Java的字節碼(包括需要被解釋的指令的程序)轉換成可以直接發送給處理器的指令的程序。當你寫好一個Java程序後,源語言的語句將由Java編譯器編譯成字節碼,而不是編譯成與某個特定的處理器硬件平台對應的指令代碼(比如,Intel的Pentium微處理器或IBM的System/390處理器)。字節碼是可以發送給任何平台並且能在那個平台上運行的獨立於平台的代碼。
分類
事實上,JIT編譯器分成兩種:經濟編譯器和普通編譯器。
經濟JIT編譯器
經濟JIT編譯器代表了運行一個Java應用程序所需要的最少功能,它直接用對等的本機代碼取代每一條MSIL指令,不 進行任何優化從而也帶來更少的系統負載。這也意味着它主要應用在內存等資源比較緊張的平台上。
普通JIT編譯器
普通JIT編譯器則是缺省的運行時配置,它會對其產生的代碼進行即時優化。這樣做無形中給予了Java超出傳統預編譯語言的一個優點:預編譯語言只能對其處理的代碼將要運行於其上的平台做一番大致的事前估計。
JIT編譯器可以經過準確調節達到當前運行時狀態,結果可以完成一些預編譯語言無法完成的工作:更高效地利用和分配CPU寄存器。在適當的情況下實施低級代碼優化,比如常量重疊、拷貝複製、取消範圍檢查、取消常規副表達式以及方法內聯等
在代碼執行期間監控當前的物理和虛擬內存需求從而更高效地利用內存
產生特定的平台指令以準確、充分地利用實際的處理器模式
NET編譯的結果就是JIT所帶來的額外負載要求並沒有產生顯著的性能損失。
Java中的JIT
JIT Compiler(Just-in-time Compiler) 即時編譯
最早的Java建置方案是由一套轉譯程式(interpreter),將每個Java指令都轉譯成對等的微處理器指令,並根據轉譯後的指令先後次序依序執行,由於一個Java指令可能被轉譯成十幾或數十幾個對等的微處理器指令,這種模式執行的速度相當緩慢。 針對這個問題,業界首先開發出JIT(just in time)編譯器。當Java執行runtime環境時,每遇到一個新的類別(class:類別是Java程式中的功能群組),類別是Java程式中的功能群組-JIT編譯器在此時就會針對這個類別進行編譯(compile)作業。經過編譯後的程式,被優化成相當精簡的原生型指令碼(native code),這種程式的執行速度相當快。花費少許的編譯時間來節省稍後相當長的執行時間,JIT這種設計的確增加不少效率,但是它並未達到最頂尖的效能,因為某些極少執行到的Java指令在編譯時所額外花費的時間可能比轉譯器在執行時的時間還長,針對這些指令而言,整體花費的時間並沒有減少。 基於對JIT的經驗,業界發展出動態編譯器(dynamic compiler),動態編譯器僅針對較常被執行的程式碼進行編譯,其餘部分仍使用轉譯程式來執行。也就是說,動態編譯器會研判是否要編譯每個類別。動態編譯器擁有兩項利器:一是轉譯器,另一則是JIT,它透過智慧機制針對每個類別進行分析,然後決定使用這兩種利器的哪一種來達到最佳化的效果。動態編譯器針對程式的特性或者是讓程式執行幾個循環,再根據結果決定是否編譯這段程式碼。這個決定不見得絕對正確,但從統計數字來看,這個判斷的機制正確的機會相當高。事實上,動態編譯器會根據「歷史資料」做決策,所以程式執行的時間愈長,判斷正確的機率就愈高。以整個結果來看,動態編譯器產生的程式碼執行的速度超越以前的JIT技術,平均速度可提高至50%。
JIT 頁面渲染引擎
JIT 頁面渲染是 COMSHARP CMS 為了實現網站內容即時更新而開發的頁面生成技術,JIT頁面渲染引擎直接從數據庫獲取網站最新內容,瞬間生成頁面輸出給訪問者,並通過 URL 轉寫技術實現純靜態地址。JIT 頁面渲染技術是針對傳統 CMS 生成靜態 HTML 文件而言。傳統 CMS 由於使用腳本代碼模板技術,頁面生成前,需要將數據庫中的頁面內容用外部模板進行解析與渲染,導致嚴重的性能問題,為了解決這個問題,傳統 CMS 一般採用生成 HTML 靜態文件技術,即,在內容創作完成後,對全站的內容執行一個靜態 HTML 文件生成過程,最終,全站內容以靜態 HTML 文件的形式存在。 靜態 HTML 文件技術最顯著的優勢是性能出眾,然而這種技術最嚴重的問題在於,用戶對站點任何修改與更新,必須首先經過一次全站 HTML 文件重新生成過程,然後才能被訪問者看到。根據不同 CMS 產品的性能和站點規模,這個 HTML 生成過程可能長到十幾分鐘到幾十分鐘或更長。也有個別 CMS 產品使用觸髮式頁面渲染模式,即內容更新後,並不立即生成 HTML 文件,而是在用戶第一次訪問該頁面時,觸發生成該頁面的 HTML 文件,這種技術的問題在於,用戶第一次訪問被更新頁面的時候,可能經歷非常漫長的等待,因為站點內各個頁面之間並非孤立的,他們可能相互引用,雖然訪問的只是一個頁面,為了對引用頁面同步更新,需要重新生成 HTML 文件的頁面可能有多個。 JIT 頁面渲染如何工作?是COMSHARP CMS JIT 渲染引擎與傳統 CMS 生成 HTML 靜態頁面模式對比。可以看出,JIT 渲染引擎直接將網站最新內容從數據庫渲染給訪問用戶,而傳統 CMS 的站點內容在到達訪問用戶之前,首先要經歷一個 HTML 的轉換過程。COMSHARP CMS JIT 頁面渲染如何實現毫秒級的渲染速度? COMSHARP CMS 在頁面渲染的時候,JIT 引擎可以在數十毫秒的時間內容完整整個頁面的生成,這樣就保證用戶訪問的時候,不會因 JIT 渲染造成延遲。事實上,COMSHARP CMS 網站訪問速度只取決於服務器帶寬,頁面生成過程帶來的延遲可以忽略不計。 我們有兩項技術保證這樣的性能: 編譯級主題模板 COMSHARP CMS 的編譯級主題模板直接內嵌在系統的 DLL 中,主題模板的套用是在運行時(Run Time)完成,這和傳統 CMS 的調用腳本代碼模板解釋運行是截然不同。