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

Memory Leak em javaScript

Memory Leak em javaScript

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/