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
Antwort
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.
- 1. MOUSE_OUT außerhalb eines Movieclips?
- 2. Formularschaltflächen außerhalb eines Formulars einfügen
- 3. Anzeigen von Bildern außerhalb eines iframe Colorbox
- 4. Verwenden eines jQuery-Klons außerhalb des DOM
- 5. Elemente außerhalb eines anderen spezifischen Elements auswählen
- 6. Alle Elemente außerhalb eines Containers entfernen?
- 7. definieren C# Klasse außerhalb eines Namespace
- 8. Aktualisieren von ListBox außerhalb eines Aktualisierungsbereichs
- 9. Aktualisieren eines Steuerelements außerhalb des UpdatePanels
- 10. Verwendung eines Objekts außerhalb seiner Deklarationsdatei (C++)
- 11. JS: Verschieben eines div außerhalb seines Elternelements
- 12. Handhabung Klicks außerhalb eines Elements ohne jquery
- 13. Erkennung eines Mausklicks außerhalb des Formulars
- 14. Binding to Command von außerhalb eines UserControl
- 15. Verwenden von Lip Bildfilter außerhalb eines Zweigs
- 16. Maus Standorte außerhalb eines Event-Handlers
- 17. ein Repository außerhalb eines Controllers in Symfony2
- 18. Positionieren eines Bilds außerhalb seines Containers
- 19. Ausführen eines Python-Skripts außerhalb von Django
- 20. Was "wirft" außerhalb eines catch block tun?
- 21. Scrollen eines UIScrollView von außerhalb dieses Bereichs?
- 22. How to touchend Ereignis außerhalb eines Elements
- 23. Vermeiden Sie ein Bild außerhalb eines div?
- 24. Speicher außerhalb eines Programms ohne Segmentfehler lesen
- 25. Capture mousedown- Ereignis außerhalb eines Elements jquery
- 26. Senden eines Formulars von AJAX außerhalb der Seite (
- 27. Aufbau einer SQLite-Datenbank außerhalb eines Android-Projekts?
- 28. Versucht, alles außerhalb eines beweglichen div zu schwärzen
- 29. Zugriff auf eine Methode außerhalb eines EventListeners? (SAPUI5)
- 30. Singleton Entwurfsmuster - explizite Angabe eines Konstruktors außerhalb der Klasse
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 –
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
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. –