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 contador nunca é liberada
  • enquanto contar existir
Isso não é errado — mas precisa ser intencional.

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
Caches precisam de estratégia de descarte.

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:

  • WeakMap e WeakSet ajudam a evitar vazamentos
  • não impedem o Garbage Collector
Eles são aliados importantes em aplicações complexas.

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.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

O título Space Invaders, lançado em 1980, fez tanto sucesso em todo o mundo que as pessoas compravam o console Atari apenas para poderem jogá-lo em casa. Saiba mais sobre este incrível título clicando aqui.


A Máquina de Pascal, criada em 1642 pelo filósofo, físico e matemático francês Blaise Pascal, é reconhecida como o primeiro computador do mundo e ele foi criado com o objetivo de calcular impostos. Saiba mais.


Considerando todas as adaptações de jogos de videogame para o cinema, a mais bem sucedida foi Lara Croft: Tomb Raider, lançado em 2001 e que faturou 274 milhões de dólares. Ele foi dirigido por Simon West e estrelado pela bela Angelina Jolie.


As primeiras máquinas de fliperama do mundo a utilizarem moedas, chamadas de Galaxy Game, custavam mais de 20 mil dólares para serem produzidas. Saiba mais sobre elas aqui.


Utilizar seu notebook em camas, sofás ou qualquer superfície macia pode obstruir as entradas e saídas de ar, elevando a temperatura e provocando danos a diversos componentes. Utilize-o sempre sobre uma superfície rígida. Saiba mais aqui.