Java: new generation, old generation e permanent generation na JVM \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 16 Horas 

 34 Min 

 55 Seg 

   Tempo restante da oferta: 16 34 55 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Java: new generation, old generation e permanent generation na JVM  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

# Java: new generation, old generation e permanent generation na JVM

 Neste artigo, abordaremos a new generation, a old generation e a permanent generation na JVM, compreendendo a função de cada uma destas áreas.

 [ Cleber Campomori ](https://www.treinaweb.com.br/blog/autor/cleber-campomori) 7 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/07/15150948/img-java-artigo.png)  

Na maioria das linguagens gerenciadas e que funcionam com base no conceito de máquina virtual, a área de memória que pode ser utilizada para alocar variáveis e objetos costuma ser dividida em pelo menos duas regiões: a *stack*, onde os *value-types* ficam armazenados; e a *heap*, onde os *reference-types* ficam armazenados. Aqui no blog, escrevi um artigo onde comento sobre estas duas regiões de memória e suas implicações dentro da CLR, a máquina virtual do .NET. Se você quiser dar uma olhadinha, você pode ver aqui: [C# Gerenciamento de memória no C#: stack, heap, value-types e reference-types](https://www.treinaweb.com.br/blog/gerenciamento-de-memoria-no-c-stack-heap-value-types-e-reference-types/ "C# Gerenciamento de memória no C#: stack, heap, value-types e reference-types"). Apesar de o artigo ser baseado no .NET, o funcionamento é o mesmo para quase todas as linguagens baseadas em máquinas virtuais.

Quando falamos de maneira específica sobre o Java, a JVM ainda tem mais divisões criadas dentro da *heap* durante o seu processo de gerenciamento de memória: estamos falando da *young generation* e da *old generation*. Em adição, ainda podemos ter a *permanent generation*, que não fica na *heap*, mas desempenha um papel importante no que diz respeito ao processo de gerenciamento de memória da JVM. Vamos observar o papel de cada uma dessas divisões no processo de gerenciamento de memória dentro da JVM.

[  ![Desenvolvedor Java Web Pleno](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/java.svg)   Formação Desenvolvedor Java Web Pleno Conhecer a formação ](https://www.treinaweb.com.br/formacao/desenvolvedor-java-web-pleno)

### New generation (NewGen)

A *new generation* armazena os objtetos que tenham sido instanciados mais recentemente através da palavra-chave `new`. Isso quer dizer que, assim que você instancia um novo objeto de qualquer tipo no Java, esse objeto é armazenado dentro da *new generation*. Essa área pode ser ainda dividida em outras duas sub-áreas:

- *eden space*: é a sub-divisão na qual os objetos são inicialmente armazenados dentro da *new generation*. Logo após a operação de geração de instância de um objeto, ele é imediatamente armazenado nesta área;
- *survivor space*: é a sub-divisão para a qual os objetos são movidos quando estes sobrevivem a um ciclo menor de varredura do *garbage collector*.

Como o Java é uma linguagem gerenciada baseada em máquina virtual, existe um componente importantíssimo relacionado a todo esse processo de gerenciamento de memória: o *garbage collector*. O *garbage collector* é responsável por, como o nome indica, recolher o “lixo” gerado durante a execução de nossas aplicações na JVM. É ele quem libera espaços de memória que antes eram alocados por objetos que não estão sendo mais utilizados. O *garbage collector* pode se basear, por exemplo, em um *reference counter* para determinar quando um objeto está sendo utilizado ou não… A estratégia do *garbage collector* vai depender majoritariamente da implementação da JVM que estiver sendo utilizada.

O *garbage collector* trabalha em ciclos, sendo que em cada um destes ciclos uma porção da memória é analisada. Um dos menores ciclos que pode ser realizado é a análise do *eden space*. Se o objeto sobrevive a este ciclo de análise do *eden space* (ou seja, ele ainda é utilizado), ele é movido automaticamente para o *survivor space*. O *survivor space* também tem seu ciclo de varredura, mas trata-se de um ciclo mais espaçado. Isso diminui a carga de análise do *garbage collector*: se um objeto foi movido para o *survivor space*, trata-se de um objeto que é mais utilizado durante a execução de nossa aplicação, podendo ser “deixado um pouquinho de lado” pelo *garbage collector*.

### Old generation (OldGen)

A *old generation*, que também é chamada de *tenured generation*, armazena os objetos que tenham sobrevivido aos ciclos menores de verificação do *garbage collector* na *young generation*.

O *garbage collector* também atua na *old generation*, porém, de maneira mais espaçada ainda. Por isso, dizemos que os objetos armazenados dentro da *old generation* são *objetos de longa duração*, pois eles só poderão ser removidos da memória após estes ciclos maiores do *garbage collector* sob a *old generation*. Também em contraponto, os ciclos do *garbage collector* que atuam sob a *old generation* são chamados de *major cycles*, enquanto os ciclos sob a *new generation* são chamados de *minor cycles*.

### Permanent generation (PermGen)

A *permanent generation* não fica exatamente na *heap*: trata-se na verdade de uma porção de memória para duas estruturas distintas: *meta-informações* e *estruturas estáticas*. É nesta área que a JVM armazena as estruturas das classes utilizadas pela aplicação ou as referências a objetos e métodos estáticos que tenhamos feito em nosso código. A estrutura dos tipos primitivos também ficam armazenadas na *permanent generation*.

Em versões anteriores ao Java 8, a *permanent generation* tinha uma limitação importante: seu tamanho era limitado a 64MB em sistemas operacionais x86 e em 82MB em sistemas operacionais x64. Por isso, desde o Java 8, algumas implementações da JVM trocaram a implementação da *permanent generation* por uma nova implementação, chamada de *metaspace*. A função do *metaspace* é exatamente a mesma da *permanent generation*, com a diferença que o *metaspace* tem tamanho dinâmico. Isso reduz as chances de escrevermos um código que gere uma *runtime exception* do tipo *OutOfMemory*, por exemplo.

No final, podemos representar de maneira básica as áreas de memória relacionadas à heap da seguinte maneira:

[![](https://i.loli.net/2019/07/27/5d3b30c023cf685565.png)](https://i.loli.net/2019/07/27/5d3b30c023cf685565.png)

Entender a maneira como a JVM lida com a memória e a alocação de memória é essencial para compreendermos algumas situações que são relativamente rotineiras mas que se apresentam muitas vezes como algo *esotérico* ou imcompreeensível. Em um próximo artigo, vamos abordar uma dessas situações: o *stop-the-world*.

Autor

 ![Cleber Campomori](//secure.gravatar.com/avatar/c659c6a58478cad5b7751370ba94205f?d=mm)

## Cleber Campomori

 Líder de Conteúdo/Inovação. Pós-graduado em Projeto e Desenvolvimento de Aplicações Web. Certificado Microsoft MCSD (Web). 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/cleber-campomori)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/06/nhibernate-no-asp-net-core-400x280.png)  [ ASP .NET ](https://www.treinaweb.com.br/blog/categoria/asp-net) 

     7 anos atrás

    ##  [ Utilizando o NHibernate em uma aplicação ASP.NET Core ](https://www.treinaweb.com.br/blog/utilizando-o-nhibernate-em-uma-aplicacao-asp-net-core) 

     O NHibernate é uma biblioteca madura e muito utilizada que agora fornece suporte para o .NET Core. Veja um exemplo do NHibernate no ASP.NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/01/o-que-e-e-como-comecar-com-java-400x280.jpg)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     9 anos atrás

    ##  [ O que é e como começar com Java? ](https://www.treinaweb.com.br/blog/o-que-e-e-como-comecar-com-java) 

     Quer iniciar seus estudos em Java e não sabe por onde começar? Veja o que preparamos pra você.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/07/DICA-CODIGO-JAVA-1-400x280.jpg)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     3 anos atrás

    ##  [ Dica de Código: Principais coleções do Java ](https://www.treinaweb.com.br/blog/dica-de-codigo-principais-colecoes-do-java) 

     Explore as poderosas ferramentas do Java Collections Framework: List, Set e Map. Domine a manipulação de dados com eficiência!

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/como-instalar-o-java-e-nosso-primeiro-exemplo-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     4 anos atrás

    ##  [ Conheça o recurso de Records no Java ](https://www.treinaweb.com.br/blog/conheca-o-recurso-de-records-no-java) 

     Neste artigo, vamos aprender sobre o recurso de Records no Java. Veremos como utilizar esse recurso, suas vantagens e desvantagens.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/03/GUIA-LINGUAGEM-JAVA-400x280.png)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     6 anos atrás

    ##  [ Guia da linguagem Java ](https://www.treinaweb.com.br/blog/guia-da-linguagem-java) 

     Confira neste guia os principais tópicos para iniciar seus estudos na linguagem Java.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/02/JAVA-ORIENTACAO-OBJETOS-400x280.png)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     6 anos atrás

    ##  [ Orientação a objetos em Java ](https://www.treinaweb.com.br/blog/orientacao-a-objetos-em-java) 

     É perceptível a vocação do Java para estruturas orientadas a objetos. Veremos um pouco mais sobre neste artigo.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/07/DICA-CODIGO-JAVA-1-400x280.jpg)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     3 anos atrás

    ##  [ Dica de Código: Expressões Lambda em Java ](https://www.treinaweb.com.br/blog/dica-de-codigo-expressoes-lambda-em-java) 

     Aprenda como as expressões lambda simplificam o código Java ao criar instâncias de interfaces funcionais e veremos alguns exemplos de uso.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/como-instalar-o-java-e-nosso-primeiro-exemplo-400x280.png)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     6 anos atrás

    ##  [ Como instalar o Java e nosso primeiro exemplo ](https://www.treinaweb.com.br/blog/como-instalar-o-java-e-nosso-primeiro-exemplo) 

     Neste artigo veremos como instalar o Java nos sistemas Windows, Linux e MacOS, além disso vamos ver como escrever e executar nosso primeiro programa com a linguagem Java.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/01/lendo-dados-do-excel-via-dde-no-java-400x280.png)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     6 anos atrás

    ##  [ Lendo dados do Excel via DDE no Java ](https://www.treinaweb.com.br/blog/lendo-dados-do-excel-via-dde-no-java) 

     Aprenda como ler dados do Excel via DDE no Java, utilizando a biblioteca JDDE da Pretty Tools.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/02/ESTRUTURAS-CONDICIONAIS-JAVA-400x280.png)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     6 anos atrás

    ##  [ Estruturas condicionais e estruturas de repetição em Java ](https://www.treinaweb.com.br/blog/estruturas-condicionais-e-estruturas-de-repeticao-em-java) 

     Depois de conhecermos mais sobre variáveis e constantes no Java, veremos neste artigo as estruturas condicionais e estruturas de repetição.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/07/DICA-CODIGO-JAVA-1-400x280.jpg)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     3 anos atrás

    ##  [ Dica de Código: Programação Assíncrona com CompletableFuture no Java ](https://www.treinaweb.com.br/blog/dica-de-codigo-programacao-assincrona-com-completablefuture-no-java) 

     Domine a programação assíncrona com CompletableFuture no Java e impulsione o desempenho de sua aplicação. Leia agora!

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2023/07/DICA-CODIGO-JAVA-1-400x280.jpg)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     3 anos atrás

    ##  [ Dica de Código: Trabalhando com Data e Hora no Java ](https://www.treinaweb.com.br/blog/dica-de-codigo-trabalhando-com-data-e-hora-no-java) 

     Nessa dica de código veremos como podemos trabalhar com data e hora no Java, para isso veremos as classes do pacote java.time.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **16h 34min 55s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
