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.