2016-04-03 9 views
1

私はJMHを使用しています。私は別々にベンチマークしたい2つの方法があります。私はオブジェクトの配列を作成する1つのメソッド(メソッドA)があります。メソッドAで作成されたオブジェクトの同じ配列を別のメソッド(メソッドB)に使用したいとします。問題は、メソッドAがスコープの外側に存在しなくなったことです。メソッド間の共有状態をどのように扱うのですか?メソッドスコープ外のJMHオブジェクト

+1

本当に2つの方法の間に依存関係が必要ですか? @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ブロックは2つのことを行う必要があります。シリアル化するオブジェクトを作成します。のシリアル化されたバージョンを作成します。

次に、すべてのオブジェクトにわたってシリアル化を実行して(既知の良好なシリアル化されたフィールドと比較して)テストmethodAを作成し、オブジェクトの逆シリアル化を実行し、既知の良好な値。

本質的には、テストメソッドにセットアップコードを設定すべきではありません。その間にどのような種類の並べ替えも想定しないでください。一度行う設定コードは@Setupにあります。その後、それらの値だけを読み込みます。値が返されていることを確認したり、JITで排除されないように何らかの方法でチェックしてください。