首頁  >  文章  >  Java  >  【翻譯】java裡寫基準測試的一些經驗

【翻譯】java裡寫基準測試的一些經驗

巴扎黑
巴扎黑原創
2017-06-26 09:15:551333瀏覽

有時候我們需要寫一些簡單的效能測試程式碼,剛好在stackoverflow上看到一篇經驗之談,, 怎麼寫基準測試來盡量屏蔽掉環境的影響。

翻譯出來貼在這裡:

來自Java HotSpot作者的撰寫微基準的提示:

規則0:閱讀有關JVM和微型基準測試的好論文。比如。不要對這種測試有太高的期望;它們對JVM性能的測試僅能起到有限效果。

規則1:始終包含一個預熱階段,它一直運行,直到觸發所有的初始化和編譯。 (預熱階段的迭代次數可以減少,經驗法則是數萬次循環。)

規則2:總是使用-XX:+ PrintCompilation,-verbose:gc等參數來運行,這樣可以確定編譯階段和JVM的其他部分在計時時是否進行了一些意外的工作。

規則2.1:在計時和預熱階段的開始和結束列印訊息,這樣可以確定計時時是否有規則2的輸出。

規則3:了解-client與-server之間的區別,還有OSR和常規彙編之間的區別。 -server優於-client, 常規編譯優於OSR

規則4:注意初始化的影響,第一次計時不要列印結果,除非是在測試類別載入的過程,規則2是你對抗這種效果的第一道防線。

規則5:注意編譯器最佳化和重新編譯的效果。計時時不要使用任何程式碼路徑,因為編譯器可能會基於一些樂觀假設進行最佳化,導致根本不會使用該路徑,從而可以對程式碼進行垃圾和重新編譯。規則2是你對抗這種效果的第一道防線。

規則6:使用適當的工具讀取編譯器的工作過程,並對它產生一些令人驚訝的程式碼做好。在形成關於什麼使事情更快或更慢的理論之前自己檢查程式碼。

規則7:減少測量中的雜訊。在一台安靜的機器上執行基準測試,並運行幾次,拋棄異常值。使用-Xbatch將編譯器與應用程式串列化,並考慮設定 -XX:CICompilerCount = 1以防止編譯器與其自身並行運作。

規則8:使用一些函式庫用來做基準測試,因為它可能更有效率。例如JMH,Caliper,UCSD Benchmarks for Java等。

以上是【翻譯】java裡寫基準測試的一些經驗的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn