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?

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.


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.


O filme Mortal Kombat, inspirado no jogo de mesmo nome, faturou 23 milhões de dólares apenas no fim de semana de estreia nos EUA. Ainda sobre este título de sucesso, outra cifra que impressiona é o faturamento ao longo do primeiro ano: 1 bilhão de dólares no mundo todo.


O famoso título Final Fantasy, da Square Enix, tem este nome exatamente porque se tratava da última esperança da empresa, que estava à beira da falência quando o lançou. Clique aqui e conheça detalhes dessa história.