Desenvolvimento

20 fev, 2018

JavaScript: gerenciamento de memória

Publicidade
(Memory Leak)

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!