2016-04-03 40 views
1

我正在使用JMH。我有兩種方法,我想單獨進行基準測試。我有一個方法(方法A)創建一個對象數組。我想要另一個方法(方法B)使用在方法A中創建的同一個對象數組。問題是,通過時間方法A完成運行,數組內容不再存在於方法A範圍之外。我如何處理方法之間的共享狀態?方法範圍外的JMH對象

+1

你真的需要兩種方法之間的依賴嗎?您可以使用@Setup爲方法b創建一個數組。該樣本可以幫助:http://hg.openjdk.java.net/code-tools/jmh/file/39ed8b3c11ce/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_05_StateFixtures.java –

+0

是我知道這個選項,但我需要基準化一個方法來序列化一個對象數組,並且我想單獨對一個採用該數組對象並反序列化它的方法進行基準測試。在此先感謝 – TaliG

+1

那麼序列化@Setup中的對象呢?這裏我沒有真正明白你的意思。如果你顯示一些代碼也許會有幫助。 –

回答

0

您應該創建一個@Setup塊,創建一個可使用的序列化/反序列化實例的集合。這塊@Setup塊將不得不做兩件事;創建您想要序列化的對象,相同的序列化版本。

什麼,然後你要做的就是寫你的測試methodA跨所有對象進行序列化(和比較它們與已知良好的串行化字段),然後有第二次測試methodB執行對象的反序列化,並將其與比較已知的良好價值。

在本質上不應該有設置代碼在您的測試方法,你不應該承擔任何他們之間的排序。請在@Setup中安裝一次設置代碼,然後僅讀取這些值。確保你返回值或以某種方式檢查它們,以便它們不被JIT消除。