Sto provando a creare il punto di riferimento che modifica la collezione. Il problema è che non so come inizializzare i dati per ogni chiamata.Come inizializzare i dati per ogni chiamata in JMH?
Si supponga che Test.DATA sia una raccolta che contiene 200 elementi.
Il metodo test
rimuove i dati in base al valore di a.isTrue()
.
So che @Setup
è simile a @Setup
di JUnit. Voglio usare @Before
ma non sono riuscito a trovarne uno in JMH. Come posso inizializzare i dati ogni volta prima che venga invocato il metodo test
?
Grazie mille in anticipo.
@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();
}
}
Avete letto JMH campioni, come suggerito in Documenti? In particolare, questo esempio risponde direttamente alla tua domanda: http://hg.openjdk.java.net/code-tools/jmh/file/bcec9a03787f/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_38_PerInvokeSetup .java –
Oh scusa non avrei dovuto fare questa domanda quando la risposta è già nei campioni. Ammetto di non aver letto tutti gli esempi di codice. Per alcuni motivi, i miei occhi continuavano a guardare stati e infissi. – hussachai