Regiões do Heap da JVM e Ciclo de Vida dos Objetos
Explore a Geração Jovem (Eden, Survivor), a Geração Antiga e o Metaspace, compreendendo como os objetos se movem entre elas.
Regiões do Heap da JVM e Ciclo de Vida dos Objetos é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.
O modelo de memória da JVM
A JVM divide a memória em várias áreas. A memória dinâmica armazena todas as instâncias de classes e matrizes. As áreas fora da memória dinâmica incluem Metaspace, que contém metadados de classes, quadros de pilha e memória native.
Geração jovem: espaço Éden
Os objetos recém-alocados vão para o Éden. Quando o Éden fica cheio, ocorre uma coleta de lixo menor. Os objetos sobreviventes são copiados para um espaço de sobreviventes.
// Object allocation starts in Eden:
String s = new String("hello"); // allocated in Eden
List<Integer> list = new ArrayList<>(); // also EdenEspaços de sobreviventes: S0 e S1
Dois espaços de sobreviventes, S0 e S1, mantêm objetos que sobreviveram a pelo menos uma coleta de lixo. Os objetos alternam entre S0 e S1 a cada coleta de lixo menor. Seu contador de idade é incrementado.
Limite de envelhecimento
Quando a idade de um objeto ultrapassa o limite de envelhecimento, cujo padrão é 15, ele é promovido para a geração antiga. Objetos grandes podem ignorar a geração jovem e ir diretamente para a geração antiga.
// JVM flags:
// -XX:MaxTenuringThreshold=15 (default)
// -XX:PretenureSizeThreshold=1m (objects > 1MB go directly to Old Gen)Geração antiga (espaço de objetos antigos)
Objetos de longa duração residem na geração antiga. As coletas principais, ou completas, coletam a geração antiga e são mais dispendiosas. Minimizar a quantidade de objetos de longa duração reduz a frequência das coletas completas.
Metaspace (Java 8+)
Metaspace substituiu PermGen no Java 8. Ele contém metadados de classes, código de bytes de métodos e objetos String internados. Usa memória native e cresce dinamicamente, limitado por -XX:MaxMetaspaceSize.
// Flag examples:
// -XX:MetaspaceSize=64m (initial Metaspace size)
// -XX:MaxMetaspaceSize=256m (cap to avoid native OOM)Caminho rápido de alocação de objetos
A JVM usa buffers de alocação locais às linhas de execução para alocar memória no Éden sem sincronização. Cada linha de execução tem sua própria pequena porção do Éden.
Ciclo de vida do objeto: alcançabilidade
Um objeto está ativo se for alcançável a partir de uma raiz do coletor de lixo, como uma variável da pilha, um campo estático ou uma referência JNI. Objetos inalcançáveis são candidatos à coleta.
Object a = new Object(); // reachable via local variable
a = null; // now unreachable — eligible for GCReferências suaves, fracas e fantasma
SoftReference é limpa antes de OOM, sendo usada para caches. WeakReference é limpa na próxima coleta de lixo. PhantomReference é usada para limpeza após a coleta.
Cache<String, Image> cache = new LinkedHashMap<>();
// Use SoftReference to let GC reclaim cache under memory pressure:
SoftReference<Image> ref = new SoftReference<>(loadHeavyImage());
Image img = ref.get(); // null if GC collected itFinalização de objetos (evite)
finalize() está obsoleto e é imprevisível — o coletor de lixo o chama antes da coleta, mas o momento não é garantido. Use Cleaner, disponível no Java 9+, ou try-with-resources.
Sinalizadores de dimensionamento da memória dinâmica
Controle a memória dinâmica com -Xms, o valor inicial, e -Xmx, o valor máximo. Defina-os com o mesmo valor em produção para evitar pausas causadas pelo redimensionamento.
// Recommended production flags:
// -Xms512m -Xmx512m (fix heap to 512 MB)
// -XX:NewRatio=2 (Old:Young = 2:1)Verificação rápida
Onde um objeto recém-alocado reside primeiro na memória dinâmica da JVM?
Recapitulação
A memória dinâmica da JVM tem uma geração jovem, com Éden e espaços de sobreviventes, e uma geração antiga. Os objetos envelhecem durante coletas menores e são promovidos. Metaspace contém metadados de classes. Controle tudo com -Xms/-Xmx e sinalizadores de ajuste.
Perguntas Frequentes
A aula “Regiões do Heap da JVM e Ciclo de Vida dos Objetos” é grátis?
Sim — o texto completo de “Regiões do Heap da JVM e Ciclo de Vida dos Objetos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.
O que vou aprender em “Regiões do Heap da JVM e Ciclo de Vida dos Objetos”?
Explore a Geração Jovem (Eden, Survivor), a Geração Antiga e o Metaspace, compreendendo como os objetos se movem entre elas. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Java Academy?
Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Regiões do Heap da JVM e Ciclo de Vida dos Objetos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Java Academy?
Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Regiões do Heap da JVM e Ciclo de Vida dos Objetos
- Algoritmos de GC: Serial, G1, ZGC e Shenandoah
- Detecção e Correção de Vazamentos de Memória
- Opções de Ajuste do GC e Criação de Perfis com JVisualVM