Um dos problemas mais difíceis de identificar em aplicações JavaScript são os memory leaks.
Eles não quebram o código imediatamente, mas fazem a aplicação:
- ficar lenta com o tempo
- consumir memória demais
- travar ou recarregar inesperadamente
🎯 Objetivo da aula
Ao final desta aula, você será capaz de:
- Entender o que são memory leaks
- Identificar causas comuns
- Evitar referências desnecessárias
- Escrever código mais seguro e sustentável
O que é um memory leak?
Um memory leak acontece quando:
objetos que não são mais necessários continuam ocupando memória.
Em JavaScript, isso ocorre quando o Garbage Collector não consegue liberar um objeto, porque ainda existe alguma referência a ele.
Importante: o problema não é o Garbage Collector
O Garbage Collector funciona muito bem.
O problema geralmente é:
- referências mantidas sem necessidade
- listeners esquecidos
- closures mal usados
Causa 1 — Event listeners não removidos
Veja este exemplo:
const botao = document.querySelector("#btn");
function aoClicar() {
console.log("Clicou!");
}
botao.addEventListener("click", aoClicar);
Se esse botão for removido do DOM:
- o listener continua na memória
- a função não é liberada
✅ Correto:
botao.removeEventListener("click", aoClicar); Causa 2 — Closures mantendo referências
Closures são poderosos — e perigosos se mal usados.
function criarContador() { let contador = 0;
return function () {
contador++;
console.log(contador);
};
}
const contar = criarContador();
Aqui:
- a variável
contadornunca é liberada - enquanto
contarexistir
Causa 3 — Variáveis globais desnecessárias
Variáveis globais vivem durante toda a execução da aplicação.
❌ Evite:
let dados = [];
function carregar() {
dados.push(new Array(1000000));
}
Esse array nunca será liberado.
Causa 4 — Timers esquecidos
Timers também mantêm referências.
setInterval(() => { console.log("Executando..."); }, 1000); Se não forem cancelados:
- continuam rodando
- mantêm funções vivas
✅ Correto:
const id = setInterval(() => { console.log("Executando..."); }, 1000);
clearInterval(id);
Causa 5 — Estruturas que crescem sem controle
Exemplo clássico:
const cache = [];
function adicionar(item) {
cache.push(item);
}
Se nunca limpar:
- a memória cresce indefinidamente
Boas práticas para evitar memory leaks
- remova event listeners quando não precisar mais
- limpe timers (
clearTimeout,clearInterval) - evite variáveis globais
- tenha cuidado com closures longas
- libere referências explicitamente quando possível
Uso consciente de WeakMap e WeakSet
Como vimos anteriormente:
WeakMapeWeakSetajudam a evitar vazamentos- não impedem o Garbage Collector
Ferramentas de diagnóstico
Você pode investigar memory leaks usando:
- DevTools → Memory
- Heap snapshots
- Performance monitor
Mas o melhor diagnóstico ainda é:
código bem pensado.
Resumo da aula para nunca mais esquecer
- Memory leaks consomem memória silenciosamente
- São causados por referências desnecessárias
- Listeners, timers e closures são vilões comuns
- Boas práticas evitam problemas futuros
- Código consciente é código saudável
Na próxima aula, vamos fechar esse bloco com um tema crítico: Segurança no JavaScript (XSS).
HARDWARE
Entendendo o seu computador
O que há dentro do meu computador?
Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.
Você Sabia?
Tetris
Desde o seu lançamento, em 1985, o fantástico jogo Tetris vende pelo menos 70 milhões de unidades por ano em todo o mundo! Os dados são oficiais e fornecidos pela THQ, uma das distribuidoras do título.
Civilization
A empresa Take-Two pagou à Infogrames mais de 22 milhões de dólares pelos direitos de Civilization, em novembro de 1994. Ainda sobre este título, Sid Meier, um dos seus fundadores, é o profissional da área dos games mais premiado em todo o mundo.
Recorde de patentes
A IBM detém o recorde de patentes em um único ano, atingindo a marca de 4186 registros no ano de 2008. Clique aqui e saiba mais sobre esta gigante do mundo da tecnologia.
Computadores de 1,5 tonelada
Em 1949 a revista Popular Mechanics fez uma previsão para o futuro, dizendo: "Um dia os computadores pesarão menos do que 1,5 tonelada". E pensar que temos smartphones capazes de realizar milhões de vezes mais operações do que os computadores daquela época.
Asteroids
O título Asteroids, do Atari, possui recorde de pontuação há 30 anos. Em 1982 um americano chamado Scott Safran atingiu a marca de 41.336.440. Atualmente ele faz parte de um minúsculo grupo de jogadores que conseguiram manter seus recordes por mais de 30 anos.










