2013-06-26 31 views
4

我已經聽說了很多關於JIT編譯如何使代碼在運行時比預編譯的代碼更快運行的問題。但是需要多長時間才能完全優化您的應用程序?Java的JIT編譯器工作有多快?

爲了利益的緣故,我會給你舉個例子。我有一些方法,我們稱之爲mySlowMethod()。它執行一些矩陣計算,例如每秒幾百次旋轉,乘法等。我測量每次通話的時間,得到了這些結果:

long time = System.nanoTime(); 
mySlowMethod(); 
System.out.println(System.nanoTime()-time); 

//first call 
1577187 (1.6 ms) 
//next 2 seconds 
~60000 (0.06 ms) 
//later 
less than 10000 (0.01 ms) 

回答

5

的JIT實際上在多個較小的步驟操作,以儘量減少對應用程序啓動時的性能影響。這些步驟包括:

  1. 多種模式。

    • 基線 JIT編譯器被用於執行字節碼的機器代碼[比較]簡單直接轉換爲單獨的方法立即執行。
    • 安裝優化編譯器用於對多次執行的代碼執行許多高級優化,和/或消耗大量計算資源。
  2. 增量編譯。

    • 儘管JVM先前加載了整個模塊的字節碼,但實際的編譯過程通常會延遲到第一次實際執行方法時爲止。對於大型應用程序(例如IDE),很顯然,在啓動應用程序時,IDE的所有功能都沒有正確使用,因此這種增量式編譯功能將JIT進程分散到應用程序運行時間更長的時間點它往往不是顯而易見的。

總體而言,應用程序可能永遠不會「全面優化」,但你永遠不會知道這一點,因爲你確實關心早了優化的部件。