YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Portuguese, Brazilian subtitles

← 03-13 Container_Performance

03-13 Container_Performance

Get Embed Code
13 Languages

Showing Revision 20 created 02/15/2016 by sp8.

  1. Então, já falamos sobre como seu código
    pode estar lento por causa do tipo de

  2. hardware que está executando debaixo dele,
  3. se lembra do problema do floating
    point branching?
  4. Bem, isso é principalmente um não-problema
    para o hardware de hoje.
  5. Ainda há um conjunto de problemas que você
    precisa se preocupar, que é,
  6. o desempenho das primitivas
    na linguagem que você está usando.
  7. Considere um algoritmo
    fundamental tal como a ordenação.
  8. Agora, há muitas
    formas para ordenar,
  9. e algumas são melhores que outras,
    dependendo das circunstâncias.
  10. Por exemplo, quicksort é geralmente
  11. mais rápido do que o bubblesort exceto
    quando você tem menos de mil elementos ou
  12. faz pesquisa por
    objetos numa lista ordenada.
  13. Geralmente, a melhor forma de fazer
    isto é com uma pesquisa binário.
  14. Mas completamente diferente é encontrar
    objetos num array não ordenado.
  15. Agora, em vez de comparar cada objeto
    para o valor que você procura,
  16. você pode usar uma função hash
    para o encontrar imediatamente.
  17. Tudo isto é a base da moderna ciência
    de computação e estruturas de dados.
  18. E felizmente, as linguagens modernas como
    o Java fornecem estes containers e
  19. algoritmos em seu nome, para que
    você não tenha de reescrever a função
  20. Murmur 3 Hash function ou
    o quicksort repetidamente.
  21. Mas me deixe relevar algo aqui.
  22. Em todos meus anos de programação,
  23. o problema que consistentemente
    afeta o desempenho de seu projeto
  24. tem que ver com o desempenho destes
    containers fornecidos pela linguagem.
  25. Quer dizer, eles são ótimos, certo?
  26. O Java fornece uma implementação
    de classes de vetores que
  27. você pode fazer push, pop, adicionar, e
    remover objetos como você quiser, mas
  28. para ter essa
    flexibilidade, ele tem
  29. de usar uma estrutura
    de lista conectada por trás,
  30. que tem um conjunto de
    características de desempenho únicas.
  31. Desde que você apenas esteja operando na
    frente da lista, ele é super rápido.
  32. Mas se você está tentando inserir ou
  33. remover em outros lugares, ele vai
    negligenciar para o pior tempo possível.
  34. A questão é que só por que
    o sistema subjacente fornece
  35. estes containers, não significa
    que eles vão ter bom desempenho
  36. em relação a como seu programa
    vai usar eles.
  37. James Sutherland publicou uma série de
    microbenchmarks sobre o desempenho de
  38. estruturas de dados específicas
    fornecidas pelo Java framework e
  39. descobriu que há algumas diferenças
    no desempenho versus funcionalidade
  40. que as pessoas precisam conhecer.
  41. Por exemplo, ele descobriu
    que o desempenho de uma Hashtable
  42. era cerca de 22% mais rápido
    do que o desempenho de um HashMap,
  43. dependendo de como você está
    usando os próprios containers.
  44. A questão é esta.
  45. Você já criou o perfil das classes dos
    containers que está usando em seu código?
  46. Você está confiante que eles estão usando
    o container mais rápido para
  47. o que seu código está realmente fazendo?
  48. Mm, sim, foi o que eu pensei.
  49. Mas a boa notícia é que você pode ganhar
    visibilidade quanto ao desempenho destes
  50. containers com alguns úteis
    MPIs de profiling no Android.
  51. Então, vamos ver se o código do Chris
    está à altura do nosso escrutínio.