Faz algum tempo que estou estudando o JavaScript um pouco mais a fundo, e pensando sempre em compartilhar tudo que tenho aprendido, resolvi escrever sobre o seu gerenciamento de memória.
Introdução
O JavaScript aloca memória automaticamente quando cria objetos, strings, functions, etc, e libera memória quando esses dados não são mais utilizados. Esse processo é chamado de Garbage Collection (GC).
Esse processo ocorre em todas as linguagens de alto nível, diferente das de baixo nível, como o C, que tem os métodos malloc() e free() para fazer esse gerenciamento.
Esse processo pode facilmente gerar uma confusão e dá a impressão aos desenvolvedores JavaScript (e de outras linguagens de alto nível) de que não precisam se preocupar com o consumo de memória. Isso é um grande erro, em minha opinião.
Mesmo trabalhando com linguagens de alto nível, devemos sempre nos preocupar com o gerenciamento de memória, pois existem muitos perfis de usuários. Pensando nisso, criei alguns tópicos abaixo para que você possa conhecer um pouco a mais desse processo.
Ciclo de vida da memória
Analisando um fluxo básico de gerenciamento de memória, nós temos:
- Alocação de memória
- Utilização (ler, escrever)
- Liberação de memória alocada quando não é mais necessária
Pensando em linguagens de alto nível, como: JavaScript, C#, etc, o terceiro passo é gerenciado pelo GC.
Agora, para que você possa ter um melhor entendimento, veja abaixo cada um desses passos, focando na linguagem JavaScript.
Alocação de memória
Nosso primeiro passo será entender como funciona alocação de memória.
var n = 2479000; // aloca memória para um número var s = "kratos"; // aloca memória para uma string // aloca memória para um objeto e seus valores var obj = { a: 13, b: null }; // (assim como o objeto) aloca memória para o vetor e // seus valores contidos var a = [1, null, "abra"]; // aloca uma função (que é um objeto que pode ser chamado) function f(a){ return a + 2; }
Alocação via chamada de função
Algumas funções, quando chamadas, resultam na alocação de um objeto.
var d = new Date(); // aloca um elemento do DOM var date = document.createElement('div');
Alguns métodos alocam novos valores ou objetos:
var s = "kratos"; var s13 = s.substr(0, 3); // s13 é uma nova string
Utilização de valores
A utilização de valores basicamente significa leitura e escrita em memória alocada. Isso pode ser feito:
- Ao ler ou escrever o valor de uma variável
- No acesso de uma propriedade de um objeto
- Ao passar um argumento para uma função
Memory leak
Para finalizar esse artigo, achei legal passar um pouco sobre memory leak. Caso você ainda não tenha ouvido nada sobre esse assunto, “memory leak” ou traduzindo para o português “vazamento de memória”, é um problema que a grande maioria de nós, desenvolvedores, já passou.
Esse problema ocorre quando uma porção de memória alocada para uma determinada operação, não é liberada quando não é mais necessária. Caso tenha interesse em saber mais sobre esse assunto, segue link de um artigo bem completo sobre esse assunto:
Bom, espero que tenham gostado, e até um próximo artigo!