我想測試一些隊列插入和刪除對象的時間戳。經過幾次測試後,我在相同的代碼上獲得了高達80倍的更好結果的顯着加速改進。這看起來很明顯是由JVM或hardware \ cpu緩存產生的緩存結果,但我希望每次運行都能獲得全新的結果。編程清除Java CPU緩存
有沒有一種方法可以從Java代碼中以編程方式清除這兩種緩存?
我想測試一些隊列插入和刪除對象的時間戳。經過幾次測試後,我在相同的代碼上獲得了高達80倍的更好結果的顯着加速改進。這看起來很明顯是由JVM或hardware \ cpu緩存產生的緩存結果,但我希望每次運行都能獲得全新的結果。編程清除Java CPU緩存
有沒有一種方法可以從Java代碼中以編程方式清除這兩種緩存?
這可能是由於JIT踢入。JIT會在經過一定數量的運行後將您的字節碼編譯爲機器碼,以使其更有效。
通過設置-XX:CompileThreshold
選項(默認值爲10,000)或excluding your class from being optimised at all,您可以更改方法優化之前的呼叫次數。
但是我不確定爲什麼你想禁用編譯器並強制你的程序運行得更慢。
或者他可以完全關閉JIT編譯器......儘管這樣做意味着他將測量以不切實際的方式運行的代碼。這些數字可能不代表真實的表現。 – 2013-02-17 08:15:51
這聽起來更有可能是JIT編譯器踢它。至於如何解決它是超越我... – MadProgrammer 2013-02-17 08:09:15
爲什麼不簡單地運行一段時間讓jit運行,然後開始測量? – radai 2013-02-17 08:11:29
http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java – 2013-02-17 08:11:40