Por que é java HashMap redimensionamento ou repetição não tomar abordagem gradual, como Redis

Comprimento Zhang:

Estou apenas me perguntando por que o processo reshashing jdk HashMap não tomar a abordagem gradual, como Redis. Embora o cálculo repetição de Jdk HashMap é bastante elegante e eficaz, ele ainda vai levar tempo perceptível quando o número de elementos no HashMap original contém um grande número de entradas. Eu não sou um usuário experiência java então eu sempre supor que deve haver consideração dos designers Java que está além do limite da minha capacidade cognitiva. A repetição gradual como Redis pode distribui eficazmente a carga de trabalho para cada posto, apagar ou entrar no HashMap, o que poderia reduzir significativamente o redimensionamento / hora requentar. E eu também compararam os dois métodos de hash que na minha mente não se restringem Jdk de fazer um rehashing gradual. Espero que alguém poderia dar uma pista ou alguma inspiração. Muito obrigado antecipadamente.

Mateus Timmermans:

Se você pensar sobre os custos e benefícios de rehashing incremental para algo como HashMap, verifica-se que os custos não são insignificantes, e os benefícios não são tão grandes como você pode gostar.

Uma forma incremental requentar HashMap:

  • Usos 50% mais memória, em média, porque ele precisa manter tanto a tabela antiga e nova tabela ao redor durante o rehash incrementais; e
  • Tem um custo computacional um pouco maior por operação. Além disso:
  • O rehashing ainda não é inteiramente incremental, porque alocar a nova matriz tabela hash tem que ser feito de uma só vez; assim
  • Não há melhorias na complexidade assintótica de qualquer operação. E finalmente:
  • Quase nada que realmente precisa rehashing incremental pode ser implementado em Java em tudo, devido às pausas do GC imprevisíveis, então porque se preocupar?

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=285974&siteId=1
Recomendado
Clasificación