Comment est-ce qu'on est censé faire un benchmark des méthodes qui lancent des exceptions en utilisant jmh?Comment référencer des méthodes qui lancent des exceptions?
J'ai essayé le suivant sous JMH 1.19:
@Benchmark
public void throwException() throws IllegalArgumentException
{
throw new IllegalArgumentException("Hard-coded exception");
}
mais nous avons eu cette erreur:
# Run progress: 0.00% complete, ETA 00:02:00
# Fork: 1 of 3
# Warmup Iteration 1: <failure>
java.lang.IllegalArgumentException: Hard-coded exception
[...]
Suis-je censé Blackhole exceptions comme suit?
@Benchmark
public void throwException(Blackhole bh)
{
try
{
throw new IllegalArgumentException("Hard-coded exception");
}
catch (IllegalArgumentException e)
{
bh.consume(e);
}
}
ou est-il une autre façon de dire jmh
d'accepter les exceptions lancées?
Lisez ce https://shipilev.net/blog/2014/exceptional-performance/ et vérifiez ce https://github.com/shipilev/article-exception-benchmarks/tree/master/src/main/java/ net/shipilev/perf/exceptions –
@OlegEstekhin D'accord, mais pourquoi ça marche? Qu'est-ce qui permet à son code de lancer des exceptions alors que le mien déclenche un échec? – Gili
Je pense que la différence principale est que l'exemple appelle une exception jetant la méthode, au lieu de la jeter du benchmark lui-même –