2013-06-28 37 views
6

在同一臺機器的每次運行中,Java JIT是否使用相同的優化來編譯字節碼?Java JIT是否確定地編譯字節碼 - 對同一臺機器上的每個運行進行相同的優化?

它是否考慮到動態因素(如CPU使用率),還是每次都會進行相同的優化而不考慮臨時因素?

+0

哪個Java JIT編譯器? – SLaks

+1

我很想知道HotSpot – selig

+0

如果你的程序有隨機性,一次運行調用方法A,另一次運行調用方法B,那麼不會,你不會得到相同的優化。 –

回答

4

不,優化是非確定性的。即使您運行完全相同的單線程完全確定性程序,JIT使用的採樣器也可以選擇不同的集合,以確定要優化哪些方法。

可以更改生成的機器碼的另一件事是代碼引用的某些常量的實際內存位置。 JIT可以發出直接訪問這些內存位置的機器指令,從而導致不同通行證上機器代碼之間的額外差異。

使用Jikes RVM的研究人員通過使用名爲Compiler Replay的功能已針對其基準測試中的此問題。

相關問題