8 points par baeba 2025-05-02 | Aucun commentaire pour le moment. | Partager sur WhatsApp

Introduction

  • Dans JDK 25, String::hashCode a é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, @Stable est appliqué au champ String.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 String dans JDK 25 est efficace pour le code fondé sur des structures statiques.
  • @Stable est 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.

Aucun commentaire pour le moment.