8 pontos por baeba 2025-05-02 | Ainda não há comentários. | Compartilhar no WhatsApp

Introdução

  • No JDK 25, String::hashCode foi aprimorado para que, na maioria dos casos, passe por constant folding.
  • O desempenho em buscas baseadas em chaves de string em Map imutáveis melhora significativamente.

Desenvolvimento

  • Em estruturas Map<String, MethodHandle>, o lookup de chaves é otimizado estaticamente.
  • Internamente, o campo String.hash recebeu @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 Map e 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 String no 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 Map baseados em strings.

Ainda não há comentários.

Ainda não há comentários.