Ich denke, es gibt Fälle, in denen Sie einen Mikro-Benchmark durchführen möchten, während Sie das VM-Argument ändern. Für Argumente, die sich auf den JIT-Compiler auswirken, führen Sie einfach das Programm aus und messen Sie die Zeit Ich kann den Effekt nicht gut messen. Dies liegt daran, dass der JIT-Compiler den Code zu dem Zeitpunkt ausführt und optimiert, den die VM während der Programmausführung festlegt. Daher kann nicht gemessen werden, wie effektiv die Änderung des VM-Arguments war.
In solchen Fällen ist es zweckmäßig, das Benchmarking-Tool JMH zu verwenden. Die Verwendung von JMH wird in diesem Artikel erläutert. Von nun an ist dies der Benchmark in JMH Ich werde erklären, wie das VM-Argument zu diesem Zeitpunkt angegeben wird.
Sie können das VM-Argument angeben, indem Sie die Fork-Annotation zu der zu vergleichenden Methode hinzufügen, wie unten gezeigt, und das JvmArgsAppend-Attribut verwenden. In diesem Beispiel wird "-XX: -Inline" angegeben.
@Benchmark
@Fork(jvmArgsAppend = "-XX:-Inline") //Geben Sie VM-Argumente mit Anmerkungen an
public String Keine Inline-Erweiterung() {
return execute();
}
Durch die Implementierung wie folgt ist es auch möglich, das Vorhandensein oder Fehlen von VM-Argumenten gleichzeitig zu bewerten.
@Benchmark
public String Mit Inline-Erweiterung() {
return execute();
}
@Benchmark
@Fork(jvmArgsAppend = "-XX:-Inline") //Geben Sie VM-Argumente mit Anmerkungen an
public String Keine Inline-Erweiterung() {
return execute();
}
Recommended Posts