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?

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.


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.


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.


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.


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.