Gran mejora de rendimiento en cadenas (`String`) de JAVA
(inside.java)Introducción
- En JDK 25,
String::hashCodefue 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
@Stableal campoString.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
Stringen JDK 25 es efectiva para código basado en estructuras estáticas. @Stablees 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.