2016-04-03 5 views
1

Ich verwende JMH. Ich habe 2 Methoden, die ich separat benchmarken möchte. Ich habe eine Methode (Methode A), die ein Array von Objekten erstellt. Ich möchte, dass eine andere Methode (Methode B) das gleiche Array von Objekten verwendet, die in Methode A erstellt wurden. Problem ist, dass der Array-Inhalt nicht mehr außerhalb des Bereichs der Methode A existiert, nachdem die Methode A beendet wurde. Wie gehe ich mit dem gemeinsamen Status zwischen Methoden um?JMH-Objekte außerhalb eines Methodenbereichs

+1

Brauchen Sie wirklich die Abhängigkeit zwischen den beiden Methoden? Sie könnten @Setup verwenden, um ein Array für Methode b zu erstellen. Dieses Beispiel könnte helfen: http://hg.openjdk.java.net/code-tools/jmh/file/39ed8b3c11ce/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_05_StateFixtures.java –

+0

Ja Ich bin mir dieser Option bewusst, aber ich muss eine Methode benchmarken, die ein Array von Objekten serialisiert, und ich möchte separat eine Methode benchmarken, die dieses Array von Objekten nimmt und es deserialisiert. Vielen Dank im Voraus – TaliG

+1

Also was ist mit dem Serialisieren der Objekte in der @ Setup? Ich verstehe Ihren Standpunkt hier nicht wirklich. Vielleicht hilft es, wenn Sie etwas Code zeigen. –

Antwort

0

Sie sollten einen @Setup-Block erstellen, der eine Sammlung von Instanzen erstellt, die Sie für die Serialisierung/Deserialisierung verwenden können. Dieser @Setup Block muss zwei Dinge tun; Erstellen Sie die Objekte, die Sie serialisieren möchten, und die serialisierten Versionen derselben.

Was Sie dann tun, ist Ihr Test schreiben methodA die Serialisierung über alle Objekte durchführt (und vergleicht sie mit den bekannten guten serialisiert Felder) und haben dann den zweiten Test methodB, der die Deserialisierung der Objekte führt und vergleicht sie mit der bekannte gute Werte.

Im Wesentlichen sollten Sie Setup-Code in Ihren Testmethoden nicht haben, und Sie sollten keine Art von Reihenfolge zwischen ihnen annehmen. Haben Sie den Setup-Code einmal in @Setup und lesen Sie diese Werte danach nur noch. Stellen Sie sicher, dass Sie die Werte zurückgeben oder überprüfen, damit sie nicht vom JIT beseitigt werden.

Verwandte Themen