A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Adriano da Silva Castro

Apresentações semelhantes


Apresentação em tema: "Adriano da Silva Castro"— Transcrição da apresentação:

1 Adriano da Silva Castro
COLETA DE LIXO NA JVM Adriano da Silva Castro

2 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;

3 Coleta de Lixo Introdução Soluçã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

4 Introdução Objetivos 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;

5 Introdução Coletores 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;

6 Objeto não mais usado pela aplicação presente na heap: LIXO
Introdução Conceitos 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 pela aplicação presente na heap: LIXO

7 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;

8 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.

9 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;

10 Estratégias de Coleta

11 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;

12 Estratégias de Coleta

13 Mark-compact 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

14 Coleta de Lixo na JVM

15 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á;

16 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);

17 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;

18 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;

19 Coleta de Lixo na JVM

20 Coleta de Lixo na JVM O 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;

21 Coleta de Lixo na JVM O 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”

22 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;

23 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

24 Desempenho

25 Desempenho

26 Desempenho

27 Desempenho

28 Simulador

29 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;

30 Simulador Objetos: Oops; Heap Coletores Bit de marcação;
Estrutura estática (array de tamanho n); Singleton; Coletores Interface (abstração do coletor); Medição de tempo;

31 Simulador Scripts GUI 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;

32 Simulador

33 Simulador

34 Simulador Mark-compact concorrente Mark-lazy-sweep
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;

35 Simulações Lista Encadeada

36 Simulações Árvores Binárias

37 Simulações Instanciações de Objeto

38 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;

39 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;

40 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;

41 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;

42 Considerações Finais Mark-compact Simulador
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;

43 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;

44 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;


Carregar ppt "Adriano da Silva Castro"

Apresentações semelhantes


Anúncios Google