【基準測試】JMH 簡單入門
JMH 簡單入門
什麼是 JMH
JMH 是 Java Microbenchmark Harness 的縮寫。中文意思大致是 “JAVA 微基準測試套件”。首先先明白什麼是“基準測試”。百度百科給的定義如下:
基準測試是指通過設計科學的測試方法、測試工具和測試系統,實現對一類測試物件的某項效能指標進行定量的和可對比的測試。
可以簡單的類比成我們電腦常用的魯大師,或者手機常用的跑分軟體安兔兔之類的效能檢測軟體。都是按一定的基準或者在特定條件下去測試某一物件的的效能,比如顯示卡、IO、CPU之類的。
為什麼要使用 JMH
基準測試的特質有如下幾種:
①、可重複性:可進行重複性的測試,這樣做有利於比較每次的測試結果,得到效能結果的長期變化趨勢,為系統調優和上線前的容量規劃做參考。
②、可觀測性:通過全方位的監控(包括測試開始到結束,執行機、伺服器、資料庫),及時瞭解和分析測試過程發生了什麼。
③、可展示性:相關人員可以直觀明瞭的瞭解測試結果(web介面、儀表盤、折線圖樹狀圖等形式)。
④、真實性:測試的結果反映了客戶體驗到的真實的情況(真實準確的業務場景+與生產一致的配置+合理正確的測試方法)。
⑤、可執行性:相關人員可以快速的進行測試驗證修改調優(可定位可分析)。
可見要做一次符合特質的基準測試,是很繁瑣也很困難的。外界因素很容易影響到最終的測試結果。特別對於 JAVA的基準測試。
有些文章會告訴我們 JAVA是 C++編寫的,一般來說 JAVA編寫的程式不太可能比 C++編寫的程式碼執行效率更好。但是JAVA在某些場景的確要比 C++執行的更高效。不要覺得天方夜譚。其實 JVM隨著這些年的發展已經變得很智慧,它會在執行期間不斷的去優化。
這對於我們程式來說是好事,但是對於效能測試就頭疼的。你執行的次數與時間不同可能獲得的結果也不同,很難獲得一個比較穩定的結果。對於這種情況,有一個解決辦法就是大量的重複呼叫,並且在真正測試前還要進行一定的預熱,使結果儘可能的準確。
除了這些,對於結果我們還需要一個很好的展示,可以讓我們通過這些展示結果判斷效能的好壞。
而這些JMH都有!