Introdução
- No JDK 25,
String::hashCodefoi aprimorado para que, na maioria dos casos, passe por constant folding. - O desempenho em buscas baseadas em chaves de string em
Mapimutáveis melhora significativamente.
Desenvolvimento
- Em estruturas
Map<String, MethodHandle>, o lookup de chaves é otimizado estaticamente. - Internamente, o campo
String.hashrecebeu@Stable; quando o valor do hash é fixado, a JVM confia no cache. - Com isso, o cálculo do hash, o cálculo do índice no
Mape a busca do method handle passam a ser tratados como constantes em tempo de compilação. - Resultados de benchmark mostram ganho de desempenho de mais de 8x em relação ao JDK 24.
- A desvantagem é que, quando o
hashCodeé 0, o constant folding não acontece (incluindo a string""). - Por meio do JEP 502, uma funcionalidade semelhante também deverá ser oferecida futuramente para código de usuário.
Conclusão
- A otimização de
Stringno JDK 25 é eficaz para código baseado em estruturas estáticas. @Stableé de uso interno, mas pode vir a ser expandido no futuro como recurso público.- Ao adotar o JDK mais recente, é possível melhorar bastante o desempenho do processamento de
Mapbaseados em strings.
Ainda não há comentários.