8 puntos por baeba 2025-05-02 | Aún no hay comentarios. | Compartir por WhatsApp

Introducción

  • En JDK 25, String::hashCode fue mejorado para que en la mayoría de los casos se procese mediante constant folding.
  • El rendimiento mejora significativamente al hacer búsquedas basadas en claves de tipo cadena en Map inmutables.

Desarrollo

  • En una estructura Map<String, MethodHandle>, el lookup de claves se optimiza de forma estática.
  • Internamente, se aplica @Stable al campo String.hash, y cuando el valor hash queda fijado, la JVM confía en ese caché.
  • Gracias a esto, el cálculo del hash, el cálculo del índice del Map y la búsqueda del method handle pasan a tratarse como constantes en tiempo de compilación.
  • Según los benchmarks, se confirmó una mejora de rendimiento de hasta más de 8 veces frente a JDK 24.
  • La desventaja es que si el hashcode es 0, no se aplica constant folding (incluida la cadena "").
  • A través de JEP 502, se prevé ofrecer una capacidad similar también en código de usuario en el futuro.

Conclusión

  • La optimización de String en JDK 25 es efectiva para código basado en estructuras estáticas.
  • @Stable es de uso interno, pero podría ampliarse en el futuro como una funcionalidad pública.
  • Al adoptar un JDK reciente, es posible mejorar considerablemente el rendimiento del procesamiento de Map basados en cadenas.

Aún no hay comentarios.

Aún no hay comentarios.