Objetivos
Gerenciando Memória : Básico
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.
Ciclo de vida
Basicamente, o ciclo de vida dos recursos alocados é listado abaixo de forma básica
para melhor compreensão:
- Recurso alocado
- Recurso utilizado
- 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.
Pilha - Stack
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:
- Number
- Boolean
- Strings
- Referência para objetos
- 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:
- Objetos
- 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;
Objeto composto de objetos
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.
Histórico de atualizações
- 15/08/2025 - revisão 3 - ajustes em 'Objetivos'
- 26/09/2024 - revisão 2 - ajuste pontuais
- 05/10/2023 - revisão 1 - Correção em layout, navegação, erros gramaticais
- 31/05/2023 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.