2015-11-20 7 views
5

Ich versuche, den Benchmark zu erstellen, der die Sammlung ändert. Das Problem ist, dass ich nicht weiß, wie Daten für jeden Aufruf initialisiert werden.Wie initialisiert man die Daten für jeden Aufruf in JMH?

Angenommen, Test.DATA ist eine Sammlung mit 200 Elementen.
Die Methode test entfernt Daten basierend auf dem Wert a.isTrue().
Ich weiß, dass @Setup JUnits @Setup ähnlich ist. Ich möchte @Before verwenden, aber ich konnte einen in JMH nicht finden. Wie kann ich die Daten jedes Mal initialisieren, bevor die test-Methode aufgerufen wird?
Vielen Dank im Voraus.

@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

Haben Sie JMH Proben zu lesen, wie in docs vorgeschlagen? Beachten Sie, dass dieses Beispiel Ihre Frage direkt beantwortet: http://hg.openjdk.java.net/code-tools/jmh/file/bcec9a03787f/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_38_PerInvokeSetup .java –

+0

Oh Entschuldigung, ich hätte diese Frage nicht stellen sollen, wenn die Antwort schon in den Proben ist. Ich gebe zu, dass ich nicht jedes Code-Beispiel gelesen habe. Aus einigen Gründen schauten meine Augen immer wieder auf Zustände und Geräte. – hussachai

Antwort

2

prüfen Level Parameter auf @Setup Anmerkung. Das Äquivalent von @Before ist

@Setup(Level.Invocation) 

, die erklärt, zusammen mit vielen Warnungen (WARNING: HERE BE DRAGONS! THIS IS A SHARP TOOL., etc.) here

+1

Danke. Ich habe bereits die Antwort vom Autor des JMH im Kommentarbereich bekommen. Ich werde dies als eine Antwort für Ihre Bemühungen markieren. Ich schrieb den Artikel über die Verwendung von JMH: https://medium.com/zappos-engineering/java-8-vs-scala-part-iii-trust-no-one-bench-everything-ef0bbd6e9cdb#.fypijj48e Wenn Sie Ich werde es irgendwann überprüfen und mir ein Feedback geben, ich würde es zu schätzen wissen. – hussachai

Verwandte Themen