Introduction
- Dans JDK 25,
String::hashCodea été amélioré afin d’être, dans la plupart des cas, traité par constant folding. - Les performances des recherches basées sur des clés de type chaîne dans les Map immuables s’en trouvent fortement améliorées.
Corps
- Dans une structure
Map<String, MethodHandle>, la recherche par clé est optimisée statiquement. - En interne,
@Stableest appliqué au champString.hash, et lorsque la valeur de hash est figée, la JVM considère ce cache comme fiable. - En conséquence, le calcul du hash, le calcul de l’index de la Map et la recherche du method handle sont tous traités comme des constantes à la compilation.
- Les résultats de benchmark montrent un gain de performances pouvant dépasser 8x par rapport à JDK 24.
- Inconvénient : si le hashcode vaut 0, le constant folding ne s’applique pas (y compris pour la chaîne
""). - Via la JEP 502, une fonctionnalité similaire devrait également être proposée à l’avenir dans le code utilisateur.
Conclusion
- L’optimisation de
Stringdans JDK 25 est efficace pour le code fondé sur des structures statiques. @Stableest réservé à un usage interne, mais pourrait à l’avenir être étendu sous la forme d’une fonctionnalité publique.- Avec l’adoption d’un JDK récent, les performances du traitement des Map fondées sur des chaînes peuvent être fortement améliorées.
Aucun commentaire pour le moment.