2015-11-20 7 views
5

私はコレクションを変更するベンチマークを作成しようとしています。 問題は、呼び出しごとにデータを初期化する方法がわかりません。JMHの呼び出しごとにデータを初期化する方法は?

Test.DATAが200個の要素を含むコレクションであるとします。
testメソッドは、a.isTrue()の値に基づいてデータを削除します。
私は@SetupがJUnitの@Setupに似ていることを知っています。 @Before を使いたいですが、JMHで見つけられませんでした。 testメソッドが呼び出される前にデータを初期化するにはどうすればよいですか?
ありがとうございます。

@State(Scope.Thread) 
public class JavaCollectionBenchmark { 

    List<Foo> cols; 

    @Setup 
    public void prepare(){ 
     cols= new ArrayList<>(Test.DATA); 
    } 

    @Benchmark 
    public long test(){ 
     if(cols.size() != 200) { 
      System.out.println("SECOND TIME DOESN'T WORK!"); 
      System.exit(0); 
     }else{ 
      System.out.println("FIRST TIME"); 
     } 
     cols.removeIf(a-> a.isTrue()); 
     return cols.size(); 
    } 
} 
+1

は、あなたがJMHサンプルを読みましたか?特に、この例はあなたの質問に直接答えます:http://hg.openjdk.java.net/code-tools/jmh/file/bcec9a03787f/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_38_PerInvokeSetup .java –

+0

ああ申し訳ありませんが、答えがサンプルに含まれているときにこの質問をしてはいけません。私はすべてのコード例を読まなかったことを認めます。何らかの理由で、私の目は州や備品を見続けていました。 – hussachai

答えて

2

チェック@SetupアノテーションのLevelパラメータ。ドキュメントで提案されているよう@Beforeの同等は、一緒に(などWARNING: HERE BE DRAGONS! THIS IS A SHARP TOOL.、)多くの警告が、説明されて

@Setup(Level.Invocation) 

here

+1

ありがとうございます。コメント欄にはすでにJMHの作者からの回答があります。私はあなたの努力に対する答えとしてこれをマークします。 JMHの使用に関する記事を書きました:https://medium.com/zappos-engineering/java-8-vs-scala-part-iii-trust-no-one-bench-everything-ef0bbd6e9cdb#.fypijj48e いつかレビューをして私にフィードバックを与えたいと思っています。私はそれを感謝します。 – hussachai

関連する問題