Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Ciclo de vida de recursos
  2. Alocação de recursos
  3. Liberação de recursos

A linguagem JS possui um Garbage Collector que é responsável por liberar recursos de memória não mais utilizados. Mesmo possuindo um GC, precisamos nos preocupar com o gerenciamento de memória.

Basicamente, o ciclo de vida dos recursos alocados é listado abaixo de forma básica para melhor compreensão:

  1. Recurso alocado
  2. Recurso utilizado
  3. Recurso liberado

JavaScript utiliza dois locais para armazenar os recursos utilizados em nossos programas: Heap e Stack. Abaixo uma lista de exemplos de quais recursos são alocados nos locais mencionados.

Na pilha ou stack, são armazenados os dados estáticos que têm o tamanho conhecido em tempo de compilação. São alguns exemplos de recursos:

  1. Number
  2. Boolean
  3. Strings
  4. Referência para objetos
  5. Vetor com tamanho fixo

Após o uso dos recursos alocados na pilha, a remoção desses recursos é feita liberando assim espaço para uso posterior.

Exemplo 1
function exibirArquivo(p1,p2) {
  //p1 e p2 alocados na Stack
  console.log(p1,p2);
  //p1 e p2 removidos da Stack
} 

A memória heap é utilizada para alocar objetos e outros tipos de dados dinâmicos que têm seus conteúdo conhecido em tempo de execução. São alguns exemplos de recursos:

  1. Objetos
  2. Funções
Exemplo 2
class classe{
   nome;
}

let a = new Classe();
a.nome = "um string que representa um nome";
a.nome= “nome”;

Um vez que o GC identifica que um recurso(objeto, função entre outros) não está mais sendo utilizado em nossos programas, esses recursos são removidos para liberação de memória alocada.

Em determinados momentos, a identificação de recursos não utilizados se torna difícil de determinar. Para informar que um recurso não é mais utilizado, atribuímos null a esse recurso que basicamente informa ao GC que pode desalocar a memória utilizada.

Exemplo 3
let obj = {
  //corpo
};

//uso de obj

//informando ao GC que pode ser liberado
obj = null;

Quando dois objetos fazem referência a um mesmo objeto, e atribuindo null à uma delas, não irá libera a memória alocada para o objeto. Nesse caso, é necessário atribuir null a ambos.

Exemplo 4
let obj = {};
let obj2 = obj;

//uso de objetos

//liberação
obj = null;
ob2 = null;

Quando temos objetos compostos de objetos, ao atribuir null ao objeto pai não irá liberar a memória do objetos filhos. Nesse caso, é necessário atribuir null aos objetos compostos.

Exemplo 5
let a = {}
le b = {}

//uso de a e b
a.objeto = b;

//liberação
a.objeto = null;
b = null;
a = null;

Apesar de os conceitos básicos serem abordados, é muito importante ter em mente o funcionamento de gerenciamento de memória para criação de programas que utilizam pouco recurso de memória durante seu ciclo de vida.

  1. 15/08/2025 - revisão 3 - ajustes em 'Objetivos'
  2. 26/09/2024 - revisão 2 - ajuste pontuais
  3. 05/10/2023 - revisão 1 - Correção em layout, navegação, erros gramaticais
  4. 31/05/2023 - versão inicial