Je lis des exemples JMH et maintenant je suis à la section sur safe-looping. Voici un exemple:Comprendre éviter les éliminations Dead-code consequnces
@Benchmark
public void measureRight_2() {
for (int x : xs) {
sink(work(x));
}
}
@CompilerControl(CompilerControl.Mode.DONT_INLINE)
public static void sink(int v) {
// IT IS VERY IMPORTANT TO MATCH THE SIGNATURE TO AVOID AUTOBOXING.
// The method intentionally does nothing.
}
Mais ils ont fait une mise en garde à propos de cette technique (souligner la mienne). Parfois, le coût de l'enfoncement de la valeur dans un Blackhole est dominant le score de nano-benchmark. Dans ces cas, on peut essayer de faire un «plomb» de fortune avec une méthode non-inlineable. Cette astuce est très VM spécifique et ne peut être utilisée que si vous vérifiez le produit Code (qui est une bonne stratégie en traitant avec des nano-points de référence de toute façon). Je ne comprends pas très bien ce qu'actallall une VM spécifique ici. Nous utilisons une méthode qui n'est pas censée être inline. Le calcul ne peut donc pas être optimisé. Quel détail ai-je manqué?
_Tout sur les trous noirs est spécifique à la JVM. Certaines machines JVM peuvent marquer la méthode comme "sans effet secondaire" et éliminer les appels. –