Middle
Como funciona a memória em JavaScript?
sobes.tech IA
Resposta da IA
A memória em JavaScript é gerida automaticamente. Ela é dividida em duas áreas principais:
- Heap (Heap): Aqui, são armazenados objetos e funções. A memória é alocada dinamicamente na criação dessas entidades.
- Stack (Pilha): Aqui, são armazenados valores primitivos (strings, números, booleanos, null, undefined, Symbol, BigInt) e referências a objetos no heap. A pilha funciona pelo princípio LIFO (Last-In, First-Out).
Quando uma referência a um objeto deixa de ser usada, o coletor de lixo (Garbage Collector) liberta a memória no heap. Os algoritmos de recolha de lixo podem variar, mas frequentemente usam marcação e varredura (Mark and Sweep):
- Marcação: O coletor de lixo escaneia todos os objetos acessíveis a partir dos nós raiz (variáveis globais, variáveis locais da função atual) e os marca como "ativos".
- Limpeza: Todos os objetos não marcados (inacessíveis a partir dos nós raiz) são considerados "mortos" e removidos da memória.
O coletor de lixo funciona em segundo plano e de forma automática. Problemas de memória, como fugas, ocorrem quando objetos permanecem acessíveis, embora, pela lógica do programa, já não sejam utilizados.
Valores primitivos são copiados por valor, enquanto objetos e arrays são copiados por referência.
// Exemplo: valor primitivo copiado por valor
let a = 5;
let b = a;
b = 10;
// a permanece 5, b torna-se 10
// Exemplo: objeto copiado por referência
let obj1 = { value: 10 };
let obj2 = obj1;
obj2.value = 20;
// obj1.value agora também é 20, pois obj2 referencia o mesmo objeto