2010年5月27日星期四

什麼是 JIT? 與 Dalvik JIT

即時編譯(Just-in-time Compilation,JIT),又稱動態轉譯(Dynamic Translation),是一種通過在運行時將位元組碼翻譯為機器碼,從而改善位元組碼編譯語言性能的技術。即時編譯前期的兩個運行時理論是位元組碼編譯和動態編譯。

在編譯為位元組碼的系統如 Limb 程式語言,Smalltalk,UCSD P-System, Perl,GNU CLISP,和 Java 的早期版本中, 原始碼被翻譯為一種中間表示即位元組碼。 位元組碼不是任何特定計算機的機器碼, 它可以在多種計算機體系中移植。 位元組碼被解釋著運行在虛擬機里。

動態編譯環境是一種在執行時使用編譯器的編譯環境。 例如, 多數 Common Lisp 系統有一個編譯函數,他可以編譯在運行時創建的函數。

在即時編譯環境下, 位元組碼的編譯是第一步, 它將原始碼遞歸到可移植和可優化的中間表示。位元組碼被部署到目標系統。 當執行代碼時,運行時環境的編譯器將位元組碼翻譯為本地機器碼。 基於每個文件或每個函數:函數僅僅在他們要被執行時才會被編譯。

目標是要組合利用本地和位元組碼編譯的多種優勢:多數重量級的任務如原始碼解析和基本性能的優化在編譯時處理,將位元組碼編譯為機器碼比起從原始碼編譯為機器碼要快得多。部署位元組碼是可移植的,而機器碼只限於特定的系統結構。 從位元組碼到機器碼編譯器的實現更容易,因為大部分工作已經在實現位元組碼編譯器時完成。 ~ 維基百科


Android最新的Dalvik VM便加入了Just In Time (JIT)編譯器. ~ Android Developers Blog: Dalvik JIT

沒有留言:

發佈留言