Warum betreibt JMH verschiedene Gabeln?

Ich verwende das JMH Benchmarking Framework http: //openjdk.java.net/projects/code-tools/jmh), um Benchmarks für meinen Code auszuführen. Meines Wissens nach gabelt JMH die JVM während des Benchmarks mehrmals, um alle Profile zu verwerfen, die durch die Just-in-Time-Profilierung (JIT) erstellt wurden, die von der JVM während der Ausführung ausgeführt wurde.

Ich verstehe, warum dies in einigen Fällen nützlich ist, wie im Folgenden (wörtlich kopiert vonhttp: //java-performance.info/jmh):

Standardmäßig gibt JHM für jede Testversion einen neuen Java-Prozess aus (mehrere Iterationen). Dies ist erforderlich, um den Test vor zuvor gesammelten „Profilen“ zu schützen - Informationen zu anderen geladenen Klassen und deren Ausführungsinformationen. Wenn beispielsweise zwei Klassen dieselbe Schnittstelle implementieren und die Leistung beider Klassen testen, ist die erste Implementierung (in der Reihenfolge des Testens) wahrscheinlich schneller als die zweite (in derselben JVM), da JIT ersetzt wird direkte Methodenaufrufe an die erste Implementierung mit Schnittstellenmethodenaufrufen nach Erkennen der zweiten Implementierung.

In dem Fall, dass Sie den gleichen Code wiederholt testen, ist es jedoch von Vorteil, beispielsweise 10 Gabeln mit jeweils 20 Iterationen anstelle von 1 Gabeln mit 200 Iterationen auszuführen?

Danke vielmals

Danny

Antworten auf die Frage(1)

Ihre Antwort auf die Frage