8 Punkte von baeba 2025-05-02 | Noch keine Kommentare. | Auf WhatsApp teilen

Einleitung

  • In JDK 25 wurde String::hashCode so verbessert, dass es in den meisten Fällen per Constant Folding behandelt wird.
  • Bei Lookups in unveränderlichen Maps mit String-Schlüsseln steigt die Performance deutlich.

Hauptteil

  • In einer Map<String, MethodHandle>-Struktur wird der Key-Lookup statisch optimiert.
  • Intern wird auf das Feld String.hash @Stable angewendet; sobald der Hash-Wert feststeht, vertraut die JVM dem Cache.
  • Dadurch werden Hash-Berechnung, Map-Index-Berechnung und Method-Handle-Lookup vollständig zur Compile-Zeit als Konstanten behandelt.
  • Benchmark-Ergebnisse zeigen im Vergleich zu JDK 24 eine Performance-Verbesserung von bis zum Achtfachen.
  • Ein Nachteil ist, dass bei einem Hashcode von 0 kein Constant Folding erfolgt (einschließlich des Strings "").
  • Über JEP 502 soll künftig auch in User-Code eine ähnliche Funktion bereitgestellt werden.

Fazit

  • Die String-Optimierung in JDK 25 ist besonders wirksam für Code mit statischen Strukturen.
  • @Stable ist intern reserviert, könnte aber künftig zu einer öffentlich verfügbaren Funktion erweitert werden.
  • Mit der Einführung aktueller JDK-Versionen lässt sich die Performance bei String-basierten Map-Verarbeitungen deutlich verbessern.

Noch keine Kommentare.

Noch keine Kommentare.