2014-07-18 38 views
0

我用Java編寫了一個程序,並對它進行了測試,它使用不同的測試數據對程序進行了幾十億次測試。該程序本身只做計算並且正在使用字符串(我無法提供源代碼,對不起)。爲了加快速度,它使用帶有16個線程的8核心CPU上的15個線程的線程池,最多需要12個小時才能完成。Java巨大與同一測試的性能差異

問題是,整個測試的性能從開始到開始都有所不同。經過一點熱身後,我通常每秒獲得3百萬次測試,但有時每秒只有200萬次測試。這種性能差異會持續整個測試時間(8-12小時),所以它與JIT無關。如果我取消一個慢速測試並使用完全相同的命令行再次運行,那麼第二次嘗試的速度就會更快。到目前爲止,我注意到從開始到開始的差異高達50%。

我在做一些完全錯誤的事情,或者是什麼原因?

+0

它可能是因爲緩存 –

+0

@Nachiket,但爲什麼應該在8小時內表現不同? –

回答

0

它非常依賴於您使用的算法的複雜性。 我明白你不能發佈代碼,但你可以提到一個着名的算法嗎?

+0

它是一個編碼器和解碼器。我不能真正講述算法,我只是將它從C轉換爲Java,併爲它寫了一個完整的測試(對某些東西進行編碼,解碼結果,檢查解碼是否等於輸入)。它使用多項式計算。但是爲什麼在整個測試的時間內,完全相同的算法會隨機變慢50%呢? CPU使用率始終相同。 –