image

Acesso vitalício ao Atalho Secreto + bootcamps ilimitados

86
%OFF
Article image
Thiago Pompeu
Thiago Pompeu09/02/2026 12:29
Share
Microsoft Certification Challenge #5 - DP 100Recommended for youMicrosoft Certification Challenge #5 - DP 100

Stack e Heap em java - entendendo memória além do "funciona"

    Quando falamos de Java, stack e heap aparecem o tempo todo – em entrevistas, erros em produção, discussões sobre performance e GC. Mesmo assim, muita gente usa esses conceitos sem realmente entender como a memória é organizada e por que isso importa.

    Uma visão geral:

    • Stack - memória de execução por thread
    • Heap - memória compartilhada de objetos
    • Referências - ponte entre stack e heap

    O que é a stack

    A Stack (pilha) é uma região de memória reservada para armazenar dados locais como valores primitivos e referências de objetos. Utilizando uma estrutura LIFO (Last in First Out), a stack cresce e diminui conforme métodos são chamados e retornam.

    Características:

    • Cada thread em Java tem uma stack dedicada
    • Armazena:
    • dados locais
    • referência de objetos
    • parâmetros de métodos
    • Criação e liberação automática
    • Muito rápida

    ex:

      void metodo(){
        int x = 10;
      }
    

    Nesse caso  x é uma variável local, vive apenas durante a execução do método e é removida automaticamente no final.

    O que é o Heap

    Heap é uma região de memória onde ficam os objetos. Um objeto vive no heap enquanto existir uma referência alcançável apontando para ele. Um objeto pode ter mais de uma referência apontando para ele. Se um objeto ficar sem referência que aponte para ele, então ele é qualificado para o Garbage Collector eliminá-lo para liberar espaço no heap.

    Características do heap:

    • Compartilhado entre todas as threads
    • Armazena somente instâncias de objetos e arrays
    • Gerenciado pelo Garbage Collector
    • Tempo de vida não é determinístico

    ex:

      Pessoa p = new Pessoa();
    
    • O objeto pessoa é criado no heap
    • p é apenas uma referência para pessoa, e vive na stack

    StackOverflowError vs OutOfMemoryError

    StackOverflowError é um erro que como o nome já diz, acontece na stack e pode ocorrer com:

    • crescimento excessivo da call stack
    • recursão sem condição de parada
    • stack pequena demais

    OutOfMemoryError é um erro que ocorre no heap.

    • heap cheio
    • objetos retidos
    • vazamento de memória

    São problemas diferentes com causas diferentes.

    Por que entender isso importa?

    • Escrita de código mais previsível
    • Análise de problemas de performance
    • Leitura de logs e stack traces
    • Compreensão de Garbage Collector
    • Concorrência e segurança de threads

    Isso tudo é base para entender o ciclo de vida dos objetos, referências fracas, escape analysis tuning de JVM e muito mais.

    Você já teve algum bug ou erro em produção causado por um mal-entendido entre stack e heap?

    Conta aí 👇

    Share
    Recommended for you
    Riachuelo - Cibersegurança
    Microsoft Certification Challenge #5 - AZ-204
    Microsoft Certification Challenge #5 - DP 100
    Comments (0)
    Recommended for youMicrosoft Certification Challenge #5 - DP 100