Post on 18-Apr-2015
COLETA DE LIXO NA JVMAdriano da Silva Castro
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;
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
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;
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;
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
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;
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.
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;
Estratégias de Coleta
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;
Estratégias de Coleta
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
Coleta de Lixo na JVM
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á;
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);
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;
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;
Coleta de Lixo na JVM
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;
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”
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;
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
Desempenho
Desempenho
Desempenho
Desempenho
Simulador
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;
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;
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;
Simulador
Simulador
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;
SimulaçõesLista Encadeada
SimulaçõesÁrvores Binárias
SimulaçõesInstanciações de Objeto
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;
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;
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;
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;
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;
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;
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;