Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Memory Leak em javaScript

Memory Leak em javaScript

Avatar for Gustavo Pantuza

Gustavo Pantuza

March 02, 2013
Tweet

More Decks by Gustavo Pantuza

Other Decks in Programming

Transcript

  1. Memory Leak ▪ "... deixar de remover dados que não

    podem ser referenciados, o que é chamado de erro de vazamento de memória (memory leak) ..." Livro - http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811
  2. Memory Leak ▪ "... quando uma porção de memória, alocada

    para uma determinada operação, não é liberada quando não é mais necessária" Wikipedia - http://pt.wikipedia.org/wiki/Vazamento_de_memória
  3. Interpretador ▪ Alocação de memória ◦ Alocação por tipo de

    dado (In-Object slack tracking) ◦ Novas propriedades apontam pra um array (overflow array)
  4. Interpretador ▪ Alocação de memória ◦ Funções são objetos callable

    ◦ Funções adicionam contexto (this, arguments, return)
  5. Garbage Collector ▪ "A coleta de lixo é a reivindicação

    de porções de memória contendo objetos que não podem mais ser acessados por um programa" Livro - http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811
  6. Garbage Collector ▪ Para a execução durante um ciclo de

    coleta ▪ Coleta de lixo com Pausa Curta ▪ Evita o estilo 'pare o mundo' ▪ Sabe onde todos objetos estão na memória ▪ Previne Memory Leaks Design Elements - https://developers.google.com/v8/design#garb_coll
  7. Garbage Collector ▪ Algoritmo Mark-and-sweep ◦ Mede alcançabilidade ◦ Define

    objetos roots (objetos globais) ◦ Parte da raíz buscando todos objetos alcançáveis ◦ Objetos com referência e não alcançáveis são coletados
  8. Hands On ▪ Garbage Collection em manipulação de DOM GCcall

    - memória coletada Número de elementos do DOM
  9. Boas Práticas ▪ Evite associar objetos Javascript a objetos do

    DOM ▪ Sempre remova os eventos/objetos antes de remover os objetos do DOM ▪ Evite referenciar objetos globais dentro de closures
  10. Problemas ▪ Navegadores com Interpretadores diferentes ▪ Implementações divergentes da

    especificação ▪ Sistemas Real Time ▪ Muito ajax com criação de DOM sem
  11. Ferramentas ▪ Drip: IE Leak Detector ▪ Leak Finder For

    Javascript - google code ▪ Deep Memory Profiler - Chromium Projects ▪ Aba 'Timeline' e 'Profiles' da ferramenta do desenvolvedor no Chrome
  12. Considerações Finais ▪ Vivencie a cultura Hacker (investigue tudo) ▪

    Tire suas dúvidas na fonte (ECMA Script) ▪ Entenda as frameworks, bibliotecas e plugins ▪ Se envolva com software livre ▪ Respire Computação
  13. References ▪ http://www.ibm.com/developerworks/web/library/wa-memleak/ ▪ http://coding.smashingmagazine.com/2012/11/05/writing-fast-memory- efficient-javascript/ ▪ https://developer.mozilla.org/en- US/docs/JavaScript/Memory_Management ▪

    http://www.interworks.com/blogs/mgardner/2009/08/31/avoiding- memory-leaks-and-javascript-best-practices ▪ http://nesj.net/blog/2012/04/javascript-memory-leaks/ ▪ http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and- Hoisting
  14. References ▪ http://www.reddit. com/r/programming/comments/16e1kh/gmails_javascript_garbage_colle ction_hacks/ ▪ https://medium.com/joys-of-javascript/6b1ea3ffca45 ▪ http://code.google.com/p/leak-finder-for-javascript/ ▪

    http://www.javascriptkit.com/javatutors/closuresleak/index.shtml ▪ http://www.codeproject.com/Articles/12231/Memory-Leakage-in- Internet-Explorer-revisited ▪ http://stackoverflow.com/questions/14034107/does-javascript- setinterval-method-cause-memory-leak/