JMH Tests




TODO: Allgemeines


Herausforderung


Bei den Benchmarks handelt es sich aller Voraussicht nach um Non-Steady-State Benchmarks, da die Ausführungszeiten von HashMap.put() nicht für jedes Element konstant ist (zB. wegen Vergrößern der Map). Aleksey Shipilev (JMH Maintainer) beschreibt die Problematik von Non-Steady-State Benchmarks und möglichen Benchmark-Szenarien unter Steady State Considerations.


Testvorgehen


Schritt 1: Non-Steady-State Beweis (implizit Test für Einfügen von n-Elementen zu Beginn des Sammlungsintervalls)

Wir vermuten, dass wir bei den Benchmarks mit Non-Steady-State Benchmarks rechnen müssen. Diese machen das Messen schwieriger, da die Ausführungszeiten einer Benchmarkmethode über die Zeit anwachsen -> bei der HashMap bedingt durch die Größe der Map. Im ersten Schritt wollen wir daher beweisen, dass wir es wirklich mit Non-Steady-State Benchmarks zu tun haben.

=> Test: Hook-Test und Hashmap.put() Benchmarks mit einer stetigen Erhöhung der batchSize (=> Elemente die in die Map hinzugefügt werden).

=> Ergebnis: Wir werden das JMH Feature Batching verwenden sofern es sich um Non-Steady-State Benchmarks handelt. Dies bedeutet auch, dass wir mit verschiedenen BatchSizes testen müssen und somit weitaus mehr Testdurchläufe benötigen (Laufzeit, Auswertung erhöht) um eine Aussage treffen zu können. Sollte sich herausstellen, dass unsere Annahme falsch ist können wir die Tests weitaus einfacher gestalten. Die nachfolgenden Schritte müssten dann angepasst werden.


Schritt 2: Messen der Einzelkosten einer Hook-Ausführung (Invocation Sequence Hook und TimerHook)

TODO



Test-Szenarien


Überblick der Tests mit Threads, BatchSizes und Ziel des Tests