2016-04-03 82 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消除。