440 likes | 508 Views
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 de endereçamento para os processos em execução ; Liberação de blocos não mais utilizados ;
E N D
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 de endereçamento para os processosemexecução; • Liberação de blocosnão mais utilizados; • Crescente demanda de memórianasaplicações mais recentes; • Crescentenecessidade de gerenciamento de memóriasatisfatório;
Introdução • Gerenciamentorealizadopelodesenvolvedor? • 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; • Mecanismosimplementados na JVM; • Desempenho dos mecanismos; • Foco no algoritmoMark-sweeppresente na JVM; • Dificuldadesem sua otimização; • Desenvolvimento de umsimulador de heap; • Comparações JVM – Simulador;
IntroduçãoColetores de Lixo • Automatizam o processo de limpeza da memória; • Parte integralde muitasdaslinguagens a partir dos anos 60; • Reduzem tempo de desenvolvimento de aplicações; • Ações transparentes; • Idealmente, nãodevemcausarimpactos no desempenho da aplicação;
IntroduçãoConceitos • Objetos; • Heap • Trecho de memóriaalocadopeloprocesso; • Alocaçãodinâmica de blocos de dados; • Arraycontínuo de slots; • Relaçãoobjeto-heap • Objetossãomantidosnela! • Acessoaleatório; Objetonão mais usado pelaaplicaçãopresente na heap: LIXO
Estratégias de Coleta • ReferenceCounting (ContagemporReferência) • Contador para cadaobjeto; • Número de ponteiros que apontam para o objeto; • Auxílio do compilador • Nova instância incremento do contador; • Objetolixo: contador = 0; • Principal Limitação: detecção de referênciascí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çãoduranteprocesso de rastreamento; • Mesmocom as perdas, foi a opçãoescolhida 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) • Percorretodos os nós a partir dos nós-raíz; • Marca cadaobjetoalcançado; • Ao final, heapcontémobjetosmarcados e nãomarcados; • Nãomarcados = Nãopercorridos = LIXO; • Fase de Varredura (sweep) • Percorre a heaplinearmenteliberandotodos os objetosnão-marcados; • Fragmentação;
Estratégias de Coleta • CopyingCollectors(ColetoresporCópia) • Duasregiões de memória(heapdividida); • Regiãoativa a inativa; • Execução: • Buscaporobjetosnão mais alcançáveis; • Copia objetosalcançáveis para a nova região de memória; • Troca entre as regiõesativa e inativa; • Reduzfragmentação;
Estratégias de Coleta • Mark-sweepgerafragmentação; • Coletoresporcópianecessitam de umafase para verificar quais objetosaindaestãoemuso; • Solução: • Aplicartécnicas de cópiaaoMark-sweep Mark-compact
Coleta de Lixo na JVM • Distintasimplementaçõesvisamdistintosperfis de aplicação; • Coletoresexatos • Garantem que todos os objetosnão mais usadosserãocoletados; • Usuáriopodeescolherqualcoletorusará;
Coleta de Lixo na JVM • Generational Collection (Coletas porGeração); • Gerações • GeraçãoJovem • Objetosrecém-criados; • Tempo de vida curto; • Constante alocação de Blocos; • Maiornúmero de coletas; • Éden; • Espaço de Sobreviventes (origem e destino);
Coleta de Lixo na JVM • Gerações (continuação) • GeraçãoJovem • Quanto mais coletas umobjetosobrevive, maioressão as chances desseobjetosobreviverporainda mais tempo; • Éden Espaço de Sobreviventes; • Origem Destino;
Coleta de Lixo na JVM • Gerações (continuação) • GeraçãoAntiga • Objetossobreviventes; • Promovidos; • Região“amadurecida”; • Objetos de vida longa; • Espaçocontíguo (diferente da geraçãojovem); • Geração Permanente • Objetos de tempo de vida permanente;
Coleta de Lixo na JVMO Mark-sweepna 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-sweepna 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
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 • 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;
Conclusões • Custo entre fasesdiferentes; • 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 trabalharcomconcorrência; • Mark-lazy-sweep • Pequenas pausas sãoaceitáveis;
Conclusões • Aplicações onde prevalecemestruturasem forma de árvorebinária: • Mark-compact concorrente; • Fase de marcação simples; • Nãohánecessidade de manipulação de mapas de bits; • Mark-lazy-sweepapresentoubaixafragmentação • Alocaçãosob-demanda;
Conclusões • Aplicaçõescomum grande número de instanciações de objetos • Mark-lazy-sweep; • Custo se resume à manipulação do mapa de bits; • Mark-compactconcorrente demanda gerenciamentocomplexo de threads; • Cópiaexecutadaemparalelo;
ConsideraçõesFinais • Idéiainicial: propormelhorias nos algoritmos de coleta na JVM; • Mark-sweep Mark-lazy-sweep; • Dificuldade (ou atémesmoimpossibilidade) devido à fase 4 (compactação); • Necessidade de melhorias na primeirafase; • Dificuldade de otimizaçãopelofato do Mark-sweeptrabalharcombits de marcação vivo/morto;
ConsideraçõesFinais • Mark-compact • Padrão (algoritmoporcópia); • Execuçãoemparalelo; • Implementaçõeseficientes; • Poucoespaç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çõesFinais • Após as simulações • Algoritmo concorrente muito mais eficiente que o padrão; • Possibilidade ou não de se trabalharcomconcorrênciapode se tornarumempecilho; • Tempo total da coleta do não-concorrente é maior! • Cálculosefetuados para a gravaçãocorreta dos objetos no concorrente; • Mark-compactconcorrente e Mark-lazy-sweepsãoainda as melhoresopções para a maioria dos cenáriosvistos no trabalho;
TrabalhosFuturos • Otimizarprocesso de marcação dos objetos na JVM; • Melhorias no Simulador para melhorreflexão do comportamento na JVM; • Procurar novas maneiras de se realizar coletas de lixo a serem, inicialmenteaplicadas no Simulador;