COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de...

44
COLETA DE LIXO NA JVM Adriano da Silva Castro

Transcript of COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de...

Page 1: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

COLETA DE LIXO NA JVMAdriano da Silva Castro

Page 2: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Introdução

• Gerenciamento de memória: técnicas de manutenção de memória;

• Objetivos– alocação de blocos de endereçamento para os processos

em execução;– Liberação de blocos não mais utilizados;

• Crescente demanda de memória nas aplicações mais recentes;

• Crescente necessidade de gerenciamento de memória satisfatório;

Page 3: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Introdução

• Gerenciamento realizado pelo desenvolvedor?– Gerenciar a alocação e liberação da memória;– Nada confiável;– Dificulta a redigibilidade;

• Solução:

Coleta de Lixo

Page 4: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

IntroduçãoObjetivos do Trabalho

• Estudo dos mecanismos de coleta atuais;• Mecanismos implementados na JVM;• Desempenho dos mecanismos;• Foco no algoritmo Mark-sweep presente na JVM;• Dificuldades em sua otimização;• Desenvolvimento de um simulador de heap;• Comparações JVM – Simulador;

Page 5: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

IntroduçãoColetores de Lixo

• Automatizam o processo de limpeza da memória;• Parte integral de muitas das linguagens a partir dos

anos 60;• Reduzem tempo de desenvolvimento de aplicações;• Ações transparentes;• Idealmente, não devem causar impactos no

desempenho da aplicação;

Page 6: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

IntroduçãoConceitos

• Objetos;• Heap

– Trecho de memória alocado pelo processo;– Alocação dinâmica de blocos de dados;– Array contínuo de slots;

• Relação objeto-heap – Objetos são mantidos nela!– Acesso aleatório;

Objeto não mais usado pelaaplicação presente na heap: LIXO

Page 7: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Estratégias de Coleta

• Reference Counting (Contagem por Referência)– Contador para cada objeto;– Número de ponteiros que apontam para o objeto;– Auxílio do compilador

• Nova instância incremento do contador;

– Objeto lixo: contador = 0;– Principal Limitação: detecção de referências cíclicas;

Page 8: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Estratégias de Coleta

• Tracing (Rastreamento)– Relações entre objetos: grafo;– Percurso do grafo a partir dos nós-raíz;– Perda de desempenho;– Pausas na aplicação durante processo de rastreamento;– Mesmo com as perdas, foi a opção escolhida pela JVM.

Page 9: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Estratégias de Coleta

• Mark-sweep– Forma mais básica de algoritmos de rastreamento;– Introduzido na linguagem LISP;– Fase de Marcação (mark)

• Percorre todos os nós a partir dos nós-raíz;• Marca cada objeto alcançado;• Ao final, heap contém objetos marcados e não marcados;• Não marcados = Não percorridos = LIXO;

– Fase de Varredura (sweep)• Percorre a heap linearmente liberando todos os objetos não-marcados;

– Fragmentação;

Page 10: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Estratégias de Coleta

Page 11: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Estratégias de Coleta

• Copying Collectors (Coletores por Cópia)– Duas regiões de memória (heap dividida);– Região ativa a inativa;– Execução:

• Busca por objetos não mais alcançáveis;• Copia objetos alcançáveis para a nova região de memória;• Troca entre as regiões ativa e inativa;

– Reduz fragmentação;

Page 12: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Estratégias de Coleta

Page 13: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Estratégias de Coleta

• Mark-sweep gera fragmentação;• Coletores por cópia necessitam de uma fase

para verificar quais objetos ainda estão em uso;

• Solução:– Aplicar técnicas de cópia ao Mark-sweep

Mark-compact

Page 14: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Coleta de Lixo na JVM

Page 15: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Coleta de Lixo na JVM

• Distintas implementações visam distintos perfis de aplicação;

• Coletores exatos– Garantem que todos os objetos não mais usados

serão coletados;• Usuário pode escolher qual coletor usará;

Page 16: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Coleta de Lixo na JVM

• Generational Collection (Coletas por Geração);• Gerações– Geração Jovem• Objetos recém-criados;• Tempo de vida curto;• Constante alocação de Blocos;• Maior número de coletas;• Éden;• Espaço de Sobreviventes (origem e destino);

Page 17: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Coleta de Lixo na JVM

• Gerações (continuação)– Geração Jovem• Quanto mais coletas um objeto sobrevive, maiores são

as chances desse objeto sobreviver por ainda mais tempo;• Éden Espaço de Sobreviventes;• Origem Destino;

Page 18: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Coleta de Lixo na JVM

• Gerações (continuação)– Geração Antiga• Objetos sobreviventes;• Promovidos;• Região “amadurecida”;• Objetos de vida longa;• Espaço contíguo (diferente da geração jovem);

– Geração Permanente• Objetos de tempo de vida permanente;

Page 19: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Coleta de Lixo na JVM

Page 20: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Coleta de Lixo na JVMO Mark-sweep na JVM

• Adaptação do Mark-sweep para o Mark-compact;

• Implementado em 4 fases:– Marcação e reciclagem;– Computação dos novos endereços de memória

dos objetos vivos;– Ajuste dos ponteiros;– Compactação;

Page 21: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Coleta de Lixo na JVMO Mark-sweep na JVM

• Mapa de bits– Bit de marcação em um objeto: vivo ou morto;– Mapas de bits podem ser listas lineares, por exemplo;– Centralização das informações a respeito do estado dos

objetos;– JVM implementa Mapa de bits como forma de manter um

sumário dos objetos vivos presentes na heap;– Lazy Sweeping

• “Varredura preguiçosa”

Page 22: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Desempenho

• Coleta dos tempos de execução do coletor Mark-sweep implementado pela JVM;

• Marcação no código da máquina virtual;– Ciclos de Clock

• Foco nas 4 fases;• 1ª fase é a mais custosa;

Page 23: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Desempenho

• Lista Encadeada;• Benchmark GCBench;– Arrays de vida longa;– Árvores binárias;

• Java Grande Forum Benchmark Suite– Operações simples;– Kernels;– Aplicações de Larga Escala

Page 24: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Desempenho

Page 25: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Desempenho

Page 26: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Desempenho

Page 27: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Desempenho

Page 28: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Simulador

Page 29: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Simulador

• Aplicação em Java;• Mark-sweep, mark-compact, mark-lazy-sweep;• Comparação dos custos na JVM com os custos

no Simulador;• Simplificação dos algoritmos;• Tentativa de replicação dos benchmarks;

Page 30: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Simulador

• Objetos: Oops;– Bit de marcação;

• Heap– Estrutura estática (array de tamanho n);– Singleton;

• Coletores– Interface (abstração do coletor);– Medição de tempo;

Page 31: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Simulador

• Scripts– Interface (abstração de scripts);– Benchmarks;– Exemplo: instanciação de objetos em forma de lista

encadeada;

• GUI– Componente gráfico para chamar scripts e coletores;– Herança entre o componente visual da Heap com JPanel;

Page 32: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Simulador

Page 33: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Simulador

Page 34: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Simulador

• Mark-compact concorrente– Utiliza threads para copiar os objetos vivos;– Realiza testes durante a cópia para não conflitar com a instanciação

em paralelo;

• Mark-lazy-sweep– Manipulação de mapas de bits;– Realizam a marcação apenas na primeira vez;– Varredura se baseia no mapa de bits gerado pela última fase de

marcação;– Nova fase de marcação só é realizada quando o mapa está cheio;– Alocação sob demanda;

Page 35: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

SimulaçõesLista Encadeada

Page 36: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

SimulaçõesÁrvores Binárias

Page 37: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

SimulaçõesInstanciações de Objeto

Page 38: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Conclusões

• Custo entre fases diferentes;– Diferenças na implementação na JVM/Simulador;– Padrões de projeto na JVM;

• Aplicações (prevalecem as listas encadeadas):– Mark-compact Concorrente• Possibilidade de se trabalhar com concorrência;

– Mark-lazy-sweep• Pequenas pausas são aceitáveis;

Page 39: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Conclusões

• Aplicações onde prevalecem estruturas em forma de árvore binária:– Mark-compact concorrente;– Fase de marcação simples;– Não há necessidade de manipulação de mapas de

bits;• Mark-lazy-sweep apresentou baixa

fragmentação– Alocação sob-demanda;

Page 40: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Conclusões

• Aplicações com um grande número de instanciações de objetos– Mark-lazy-sweep;– Custo se resume à manipulação do mapa de bits;– Mark-compact concorrente demanda

gerenciamento complexo de threads;• Cópia executada em paralelo;

Page 41: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Considerações Finais

• Idéia inicial: propor melhorias nos algoritmos de coleta na JVM;– Mark-sweep Mark-lazy-sweep;– Dificuldade (ou até mesmo impossibilidade)

devido à fase 4 (compactação);– Necessidade de melhorias na primeira fase;– Dificuldade de otimização pelo fato do Mark-

sweep trabalhar com bits de marcação vivo/morto;

Page 42: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Considerações Finais

• Mark-compact– Padrão (algoritmo por cópia);– Execução em paralelo;– Implementações eficientes;– Pouco espaço para melhorias;

• Simulador– Comparações entre os algoritmos presentes;– Maior custo na quarta fase;– Complexidade das estruturas na JVM;– Implementação simplificada na JVM poderia otimizar o processo;

Page 43: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Considerações Finais

• Após as simulações– Algoritmo concorrente muito mais eficiente que o padrão;– Possibilidade ou não de se trabalhar com concorrência

pode se tornar um empecilho;– Tempo total da coleta do não-concorrente é maior!

• Cálculos efetuados para a gravação correta dos objetos no concorrente;

• Mark-compact concorrente e Mark-lazy-sweep são ainda as melhores opções para a maioria dos cenários vistos no trabalho;

Page 44: COLETA DE LIXO NA JVM Adriano da Silva Castro. Introdução Gerenciamento de memória: técnicas de manutenção de memória; Objetivos – alocação de blocos.

Trabalhos Futuros

• Otimizar processo de marcação dos objetos na JVM;

• Melhorias no Simulador para melhor reflexão do comportamento na JVM;

• Procurar novas maneiras de se realizar coletas de lixo a serem, inicialmente aplicadas no Simulador;