2010-02-27 94 views
2

既然有這麼多的JIT實現,那麼每個JIT都會發出本機代碼。那麼爲什麼沒有人做出像JIT2EXE這樣的工具來將本地代碼保存到本機可執行文件?將JIT轉換爲EXE?

+0

什麼樣的JIT的?這是非常籠統和模糊的。 – skaffman 2010-02-27 12:25:58

回答

5

這個問題有點含糊,因爲你沒有清楚地說明你正在談論的是什麼語言,在我的.NET領域,.NET可執行文件在運行時爲了加速加載時間而預先拼版。代碼可以通過稱爲NGEN的過程生成爲本機代碼,該過程採用.NET IL代碼並在處理器可以理解的二進制過程中將其轉換。通常,NGEN代碼存儲在'C:\ Windows \ Assembly \ NativeImages_ {版本}'文件夾中,其中版本代表.NET Framework版本。看看Jeffrey Richter的CodeGuru,關於NGEN,以及它可以在哪裏使用以及何時使用它。在這裏看看Codeproject關於本文的統計/比較本地二進制代碼,還有here以及Daniel Pistelli。

1

事實上,有很多Java(或其他解釋語言)到本地編譯器。曾聽說過gcj?

http://gcc.gnu.org/java/

也有編譯爲本地代碼的某些關鍵部分,並保持其他的字節碼,以節省空間混合的編譯器。哈里薩在十多年前做了這件事。

http://www.usenix.org/publications/library/proceedings/coots97/full_papers/muller/muller_html/usenix.html

的Java代碼先編譯爲C代碼,然後將其傳遞到普通的C編譯器,以利用其優化的優勢。這樣的代碼可能會變得非常快。

當然,這種提前編譯(與即時編譯相對)取消了字節碼形式的某些優點(特別是可移植性和低內存佔用),所以真實世界的應用程序相當於罕見。

+0

可移植性沒有受損,因爲您仍然有字節碼,並且如果考慮到JRE佔用空間,整體佔用空間實際上會下降:http://www.excelsior-usa.com/java-download-size.html – 2012-02-15 05:22:13