Inlining Cache, MethodHandle, MutableCallSite, Test JUnit Paramétré, JMH
On se propose de regarder comment un switch sur des Strings est implantée en Java.
En Java, le switch sur les String fait un switch sur le
hashCode des Strings
ce qui oblige le compilateur et la machine virtuelle à utiliser le même algorithme pour String.hashCode.
On souhaite éviter ce problème même si cela veut dire avoir un code un peut moins efficace.
Pour cela on va écrire une méthode générique
createMHFromStrings2 qui prend en paramètre des
String séparées par des virgules et renvoie un
method handle qui lorsqu'il est exécuté
avec une chaine de caractère renvoie l'index de la chaine si c'est un argument ou -1 sinon.
var mh = createMHFromStrings2("foo", "bar", "bazz");
(int)mh.invokeExact("foo") // 0
(int)mh.invokeExact("bar") // 1
(int)mh.invokeExact("bazz") // 2
(int)mh.invokeExact("booze") // -1