2013-02-17 65 views
2

我想測試一些隊列插入和刪除對象的時間戳。經過幾次測試後,我在相同的代碼上獲得了高達80倍的更好結果的顯着加速改進。這看起來很明顯是由JVM或hardware \ cpu緩存產生的緩存結果,但我希望每次運行都能獲得全新的結果。編程清除Java CPU緩存

有沒有一種方法可以從Java代碼中以編程方式清除這兩種緩存?

+0

這聽起來更有可能是JIT編譯器踢它。至於如何解決它是超越我... – MadProgrammer 2013-02-17 08:09:15

+1

爲什麼不簡單地運行一段時間讓jit運行,然後開始測量? – radai 2013-02-17 08:11:29

+2

http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java – 2013-02-17 08:11:40

回答

5

這可能是由於JIT踢入。JIT會在經過一定數量的運行後將您的字節碼編譯爲機器碼,以使其更有效。

通過設置-XX:CompileThreshold選項(默認值爲10,000)或excluding your class from being optimised at all,您可以更改方法優化之前的呼叫次數。

但是我不確定爲什麼你想禁用編譯器並強制你的程序運行得更慢。

+2

或者他可以完全關閉JIT編譯器......儘管這樣做意味着他將測量以不切實際的方式運行的代碼。這些數字可能不代表真實的表現。 – 2013-02-17 08:15:51