天天看點

Java性能優化實踐p73

通常情況下,基準測試都需要一些設定,比如建立一個資料集,或者為一組用來比較性能的、正交的基準測試集設定所需的條件。

狀态,以及控制狀态是JMH架構所具有的另一個特性。可以用@State注解來定義該狀态,并接受Scope枚舉來定義狀态的可見範圍:Benchmark,Group還是Thread.

使用@State注解的對象在基準測試的生命周期内都是可達的,它可能還需要執行一些必要的設定。

多線程代碼也需要謹慎處理,以確定基準測試不會因為狀态管理不善而出現偏差。

一般來說,如果在一個方法中執行的代碼沒有副作用并且傳回結果也沒有用到,那JVM就可以考慮移除這個方法,JMH需要防止這種情況的發生,而且事實上,對于基準測試的作者來說,這種情況帶來的影響是非常直接的。如果是單個結果,那麼基準測試方法可以将其傳回,而且該架構要確定暗中将這個值指派到某個地方(黑洞),這是架構作者開發的一種機制,其性能開銷可以忽略不計。

如果一個基準測試要執行多個計算,那麼将該方法的結果組合起來并傳回的成本可能會很高。在這種情況下,作者可能需要使用一個顯式的黑洞,具體做法是建立一個以Blackhole為參數的基準測試。

Java性能優化實踐p73

[圖1 還沒隔離前浦東圖書館照]

Java性能優化實踐p73

[圖2 還沒隔離前浦東圖書館照]

繼續閱讀