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();
}
}
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 –
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