Entendendo o gerenciamento de memória do Java

O Java gerencia a memória em duas grandes áreas: uma para objetos novos (younger generation, que é constituído do eden,...

Dextra

View posts by Dextra
Somos especialistas em desenvolvimento de software sob medida para negócios digitais. Pioneiros na adoção de metodologias de gestão ágil, combinamos processos de design, UX, novas tecnologias e visão de negócio, desenvolvendo soluções que criam oportunidades para nossos clientes. A Dextra faz parte da Mutant, empresa B2B líder no mercado brasileiro e especialista em Customer Experience para plataformas digitais.
Data de publicação: 02/02/2016
Java

O Java gerencia a memória em duas grandes áreas: uma para objetos novos (younger generation, que é constituído do eden, survivor tosurvivor from) e outra para objetos antigos (old generation). Cada área tem um algoritmo diferente e limpeza e liberação de memória.

O Parallel Scavenge (PS Scavenge) é o algoritmo usado para as gerações mais novas de objetos do Java. Esse algoritmo ele faz uma varredura de todos objetos para ver se algum deixou de ser referenciado pelos objetos mais antigos e ativos e aqueles que não tem mais referencia são deixados para trás. Nessa varredura todos os objetos que são referenciados são copiados para outra área da memória e depois disso a área original é apagada, limpando os objetos sem referência e as cópias antigas dos objetos ativos. Existem três áreas gerenciadas por este algoritmo: o eden e duas áreas chamadas survivor (to e from). Basicamente os objetos todos são criados na área do eden e após um tempo é feito um GC parcial onde todos objetos referenciados são copiados para o survivor to. Após um tempo, no próximo GC os objetos que estão mais tempo no survivor to são movidos para o old e o que restar com referências é copiado para o survivor from. Daí em diante os objetos vem do eden para o survivor to e do survivor from para o to também, fazendo um ping-pong dos objetos antigos que não saíram do survivor entre o to e o from.

O Parallel Mark/Sweep (PS MarkSweep) é o algoritmo que gerencia os objetos mais antigos na memória. Os objetos que ficam mais tempo na memória do Java são promovidos para a área old. Nesta área o gerenciamento de memória marca os objetos que ainda são usados (processo chamado Mark) e depois varre toda a memória no momento do GC apagando aqueles que não tem marcaçãoa alguma (Sweep). Esse processo fragmenta a memória, portanto após finalizado a JVM vai compactar essa memória reduzindo a fragmentação.

Dextra

View posts by Dextra
Somos especialistas em desenvolvimento de software sob medida para negócios digitais. Pioneiros na adoção de metodologias de gestão ágil, combinamos processos de design, UX, novas tecnologias e visão de negócio, desenvolvendo soluções que criam oportunidades para nossos clientes. A Dextra faz parte da Mutant, empresa B2B líder no mercado brasileiro e especialista em Customer Experience para plataformas digitais.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

dezesseis − 6 =

Posts relacionados

  1. Sobre a Dextra

    Somos especialistas em desenvolvimento de software sob medida para negócios digitais. Pioneiros na adoção de metodologias de gestão ágil, combinamos processos de design, UX, novas tecnologias e visão de negócio, desenvolvendo soluções que criam oportunidades para nossos clientes.

  2. Categorias

Scroll to top