Sobes.tech
Junior — Middle

Explique as principais diferenças entre a área de memória Stack e Heap na máquina virtual Java

sobes.tech IA

Resposta da IA

A máquina virtual Java divide a memória em duas áreas principais: Stack (pilha) e Heap (montão).

  • Stack (pilha) — é uma área de memória onde são armazenadas as variáveis locais dos métodos e as informações sobre as chamadas de funções (quadros de pilha). Cada thread tem a sua própria pilha. O acesso aos dados na pilha é muito rápido, a memória é alocada e libertada automaticamente ao entrar e sair dos métodos. Na pilha são armazenados tipos primitivos e referências a objetos.

  • Heap (montão) — é uma área de memória onde são colocados os objetos e arrays criados dinamicamente através do operador new. O montão é comum a todos os threads, e a gestão da memória aqui é feita pelo coletor de lixo (Garbage Collector). Os objetos no montão permanecem enquanto existirem referências a eles.

Resumindo:

  • Stack: acesso rápido, armazena variáveis locais e chamadas de métodos, de tamanho limitado.
  • Heap: armazena objetos, gerido pelo coletor de lixo, geralmente maior e dinâmico.

Exemplo:

public void exemplo() {
    int a = 10; // variável a armazenada na pilha
    MyObject obj = new MyObject(); // referência obj na pilha, objeto no montão
}