Gerência de Memória Em Java

87
 Java Tópicos selecionados de programação em Gerência de Memória em Java Parte I: Arquitetura da JVM e algoritmos de col eta de lixo 1 Helder da Rocha Setembro 2005

Transcript of Gerência de Memória Em Java

  • Java

    Tpicosselecionados

    deprogramao

    em Gerncia de Memria em Java

    Parte I: Arquitetura da JVM e algoritmos de coleta de lixo

    1

    Helder da RochaSetembro 2005

  • Por que gerenciar memria? H linguagens em que a alocao de memria trivial, e

    no requerem gerenciamento complexo Estratgias de alocao de memria

    Esttica: reas de memria so alocadas antes do incio do programa; no permite mudanas nas estruturas de dados em tempo de execuo (ex: Fortran)

    Linear: memria alocada em fila ou em pilha; no permite remoo de objetos fora da ordem de criao (ex: Forth)

    Dinmica: permite liberdade de criao e remoo em ordem arbitrria; requer gerncia complexa do espao ocupado e identificao dos espaos livres (ex: Java, C++)

    Java utiliza alocao dinmica (heap) para objetos e alocao linear (pilha) para procedimentos seqenciais Mas todo o gerenciamento feito automaticamente

    2

  • Gerencia de memria? Em Java? Ento, por que se preocupar com memria em Java?

    Diferentemente de C ou C++, programadores Java no tm a responsabilidade e nem a possibilidade de gerenciar a memria do sistema explicitamente

    Programao em alto-nvel: alocao e liberao de memria dinmica realizada automaticamente usando algoritmos: programador preocupa-se apenas com a lgica do programa

    Mas algoritmos so configurados para situaes tpicas Determinadas aplicaes podem requerer ajustes (tuning):

    performance, escalabilidade, segurana, throughput vs. liveness Saber o quanto, quando, onde ajustar requer conhecimentos

    elementares da organizao da memria e dos algoritmos de coleta de lixo empregados pela implementao da JVM usada

    3

  • Assuntos abordados

    4

    Este minicurso explora detalhes sobre o uso de memria virtual em aplicaes Java

    Est dividido em trs partes Parte I: este mdulo (arquitetura da JVM, alocao de memria

    e algoritmos de coleta de lixo) Parte II: arquitetura da HotSpot JVM e estratgias de ajuste e

    otimizao de performance Parte III: finalizao, controle do coletor de lixo, memory leaks e

    objetos de referncia

    Tpicos deste mdulo (primeira parte)1. Anatomia da JVM2. Coleta de lixo: algoritmos elementares3. Coleta de lixo: algoritmos combinados (estratgias)4. Coleta de lixo em paralelo (coletores no-seriais)

  • 1. Anatomia da JVM A mquina virtual Java (JVM) uma mquina imaginria

    implementada como uma aplicao de software [JVMS] Ela executa um cdigo de mquina portvel (chamado de Java

    bytecode) armazenado em um formato class O formato class geralmente gerado como resultado de uma

    compilao de cdigo-fonte Java

    5

    HelloWorld.class

    javaClass

    Loader

    no

    sim BytecodeVerifier

    InterpretadorTradutor JIT

    HARDWARETradutor JIT: Just-In-Time Compiler.

    Gera cdigo nativo a partir de bytecodes

    Tempo de execuo

    cdigo nativo

    Classeremota?

    F4 D9 00 03 0A B2 FE FF FF 09 02 01 01 2E 2F 30 62 84 3D 29 3A C1 00 00

    class HelloWorld {public static void main(String[] args) {

    System.out.println("Hello, world!");}

    }

    javac

  • Java esconde detalhes da memria

    A especificao da mquina virtual (Java Virtual Machine Specification [JVMS]) no determina: Detalhes de segmentao da memria (como ocorre o uso de

    memria virtual, onde fica a pilha, o heap, etc.) O algoritmo de coleta de lixo usado para liberar memria (diz

    apenas que deve haver um) Outros aspectos de baixo nvel como formato de tipos, etc.

    Diferentes implementaes da JVM tm a liberdade de organizar a memria diferentemente e escolher algoritmos de coleta de lixo diferentes Sun HotSpot JVM (mais popular; a da IBM similar) Jikes RVM (experimental; popular entre cientistas)

    6

  • A pilha, o heap e a JVM Do ponto de vista de um programador Java, as reas de

    memria virtual conhecidas como a pilha e o heap so lugares imaginrios na memria de um computador No interessa nem adianta saber onde esto Java no oferece opes de escolha: tipos primitivos ficam na

    pilha e objetos ficam no heap e ponto final!

    Implementaes da especificao da JVM, (como a HotSpot JVM), oferecem parmetros que permitem algum controle sobre a gerncia de memria Conhecer as escolhas de algoritmos e arquitetura da mquina

    virtual usada importante para saber como configur-la e quais parmetros ajustar para obter melhor performance

    Ainda assim, o controle limitado e no existe, em Java, a disciplina gerncia de memria como existe em C ou C++

    7

  • Segmentao de memria virtual:esquema lgico de baixo nvel

    Instrues (RX)

    Dados globais (RW)

    Pilha

    Heap

    PC

    SP

    O diagrama ao lado apenas ummodelo genrico* e no reflete nenhuma implementao real Os blocos azuis no heap indicam memria

    alocada dinamicamente Os blocos amarelos na pilha podem indicar

    frames (seqncias de instrues de cada mtodo) de um nico thread

    As setas azuis indicam ponteiros

    R

    e

    g

    i

    s

    t

    r

    a

    d

    o

    r

    e

    s

    8

    * Modelo inspirado em segmentao C/C++. A especificao da JVM descreve a memria em nvel mais alto (ex: no sugere onde o heap ou pilha devem ser localizados, no descreve organizao do heap, permite pilha no contgua, etc.)

    PC = Program counterSP = Stack pointer

  • Anatomia da JVM: reas de dados

    9

    A mquina virtual define vrias reas de dados que podem ser usadas durante a execuo de um programa Pilhas e segmentos de pilha (quadros) Heaps e rea de mtodos Registradores

    Algumas reas esto associadas a threads (privativas) So criadas/alocadas quando

    um thread novo criado So destrudas/liberadas

    quando o thread termina

    Outras reas esto ligadas mquina virtual (compartilhadas) Criadas quando a JVM iniciada Destrudas quando a JVM termina

    Heap (compartilhado)

    Method area

    Pool de constantes

    Cdigo compilado

    Pilhas (uma para cada thread)

    Variveis locais

    Quadro (um por mtodo)Registrador PC (um por thread)

    Pilha de operandos

    Quadro

    ...

    ...

  • O registrador PC Cada thread de execuo tem um registrador

    PC (program counter) Em qualquer momento, cada thread estar

    executando o cdigo de um nico mtodo Um mtodo (Java ou bytecode) consiste de uma lista

    de instrues executadas em uma seqncia definida O registrador PC contm o endereo da

    instruo da JVM que est sendo executada O valor do registrador PC s no definido se o

    mtodo for um mtodo nativo (implementado em linguagem de mquina da plataforma onde roda)

    10

  • Pilhas da JVM Cada thread criado com uma pilha associada

    usada para guardar variveis locais e resultados parciais A memria usada pela pilha

    Pode ser alocada no heap No precisa ser contgua liberada automaticamente depois de usada Pode ter um tamanho fixo ou expandir-se e contrair-se na

    medida em que for necessrio (implementaes de JVM podem oferecer controles para ajustar tamanho de pilhas)

    Quando a memria acaba, dois erros podem ocorrer StackOverflowError: se a computao de um thread precisar de

    uma pilha maior que a permitida (mtodos que criam muitas variveis locais, funes recursivas)

    OutOfMemoryError: se no houver memria suficiente para expandir uma pilha que pode crescer dinamicamente.

    2

    5

    t

    h

    i

    s

    0

    3

    4

    9

    F

    0

    t

    h

    i

    s

    .

    9

    9

    9

    9

    e

    2

    3

    t

    h

    i

    s

    0

    11

  • Quadros de pilha (frames)

    12

    Um quadro (frame) um segmento alocado a partir da pilha de um thread, sempre que um mtodo chamado criado cada vez que um mtodo chamado (todo mtodo tem

    um quadro associado) destrudo quando a chamada termina (normalmente ou no) sempre local ao thread (outros threads no tm acesso a ele)

    usado para guardar resultados parciais e dados realizar ligao dinmica retornar valores de mtodos despachar excees

    Cada quadro possui Um array de variveis locais Uma pilha de operandos Referncia ao pool de constantes de runtime da classe corrente.

    25

    this

    0

    349F

    34A3

    this

    .999e23

    this

    0

  • Quadros correntes e chamadas

    13

    Em um determinado thread, apenas um quadro est ativo em um determinado momento Chama-se quadro corrente Seu mtodo o mtodo corrente Sua classe a classe corrente

    Quando o mtodo corrente m1, associado ao quadro q1, chama outro mtodo m2 Um novo quadro q2 criado (que

    passa a ser o quadro corrente) Quando o mtodo m2 retornar, o

    quadro q2 retorna o resultado da sua chamada (se houver) ao quadro q1

    O quadro q2 descartado e q1 volta a ser o quadro corrente

    7

    349F this

    .7e2

    this

    0

    m1()

    m2()

    7

    490.0 this

    .7e2

    this

    0

    m1()

    m2()

    1234

  • Variveis locais

    14

    Cada frame possui um vetor de variveis contendoas variveis locais do seu mtodo associado. Variveis de at 32 bits ocupam um lugar no array Variveis de 64 bits ocupam dois lugares consecutivos

    So usadas para passar parmetros durante a chamada de mtodos

    Variveis locais so acessadas pelo seu ndice (a partir de 0) Em mtodos estticos, a varivel local

    de ndice 0 o primeiro parmetro passado ao mtodo Em mtodos de instncia, a varivel local de ndice 0 sempre

    contm a referncia this; os parmetros so passados a partir da varivel local de ndice 1

    Variveislocais de mtodoesttico

    0

    1

    2

    3

    args

    h

    sumVariveislocais de

    mtodo de instncia

    0

    1

    2

    this

    ix

    main(args) {Hello h=...int sum=...for(int i= ...

    y

    soma(x,y)

  • Pilha de operandos Cada quadro contm uma pilha LIFO

    conhecida como Pilha de Operandos Quando o quadro criado, a pilha vazia Instrues da mquina virtual carregam

    constantes ou valores de variveis locais ou campos de dados para a pilha de operandos, e vice-versa

    A pilha de operandos tambm serve para preparar parmetros a serem passados a mtodos e para receber seus resultados

    Qualquer tipo primitivo pode ser armazenado e lido da pilha de operandos. Tipos long e double ocupam duas unidades da pilha.

    Operaes sobre a pilha de operandos respeitam os tipos dos dados guardados

    0xFF

    7

    0

    (7) astore_1

    (14) istore_2

    (16) istore_3

    15

  • Cdigo Java e instrues de pilha

    16

    2: public class HelloWorld {3: public HelloWorld() {}4: public int sum(int x, int y) {5: return (x + y);6: }7: public static void main(String[] a) {

    8: HelloWorld h = new HelloWorld();

    9: int sum = h.sum(3, 4);

    10: for (int i = 0; i < sum; i++ ) {

    11: System.out.println(i);15: }13: }14:}

    0: iload_11: iload_22: iadd3: ireturn

    0: new #2;3: dup4: invokespecial #3;7: astore_18: aload_19: iconst_310: iconst_411: invokevirtual #4;14: istore_215: iconst_016: istore_317: iload_318: iload_219: if_icmpge 3522: getstatic #5;25: iload_326: invokevirtual #6;29: iinc 3, 132: goto 1735: return

    a

    h

    sum

    0

    1

    2

    3

    Arrays de variveis

    locais

    this

    x

    y

    0

    1

    2

    i

    Instrues de mquina

    PC

    &h

    7

    0

    (7)

    (14)

    (16)

    Pilha de operandos

  • O heap O heap a rea de dados onde todas

    as instncias e vetores so alocados Compartilhada por todos os threads Criada quando a mquina virtual iniciada No precisa ser uma rea contgua

    O espao de objetos no heap reciclado por um sistema de gerenciamento de memria (coletor de lixo) Algoritmo depende da implementao da JVM

    Pode ter tamanho fixo ou ser expandido/contrado Implementaes podem oferecer controles para ajustar tamanho

    do mnimo/mximo ou fixo do heap

    Se um programa precisar de mais heap que o que foi disponibilizado, a JVM causar OutOfMemoryError.

    17

  • rea de mtodos Parte do heap usada para guardar cdigo

    compilado de mtodos e construtores Criada quando a mquina virtual inicia Geralmente armazenada em uma rea de

    alocao permanente (a especificao no determina a localizao)

    Compartilhada por todos os threads

    Guarda estruturas compartilhadas por todos os mtodos de uma classe como Pool de constantes de runtime (constantes

    de diversos tipos usados pelo mtodo) Dados usados em campos e mtodos

    OutOfMemoryError ocorre se em algum momento no houver mais espao para armazenar cdigo de mtodos

    Method area

    Pool de constantes

    Cdigo compilado

    Resto do heap

    18

  • Ferramenta javap Para obter informaes sobre a estrutura de uma classe

    e instrues da JVM usadas use javap c Classe A ferramenta javap permite visualizar o contedo de um

    arquivo de classejavap [-opes] classe

    Usando opes c e verbose possvel ver Seqncia de instrues da JVM Tamanho dos quadros de cada mtodo Contedo dos quadros Pool de constantes

    Opo l imprime tabela de variveis locais Sem opes, mostra a interface da classe

    19

  • 2. Algoritmos de coleta de lixo Dados armazenados na pilha so automaticamente

    liberados, quando a pilha esvazia para ser reutilizada Mas dados armazenados no heap precisam ser

    reciclados atravs de liberao... ... manual, em linguagens como C e C++ (freelists, delete, free) ... automtica, como em Java e maior parte das linguagens*

    Liberao automtica de memria do heap realizada atravs de algoritmos de coleta de lixo H vrias estratgias, com vantagens e desvantagens de

    acordo com a taxa em que objetos so criados e descartados Tm considervel impacto na performance (gerncia explcita de

    memria tambm tem, e muito mais complicada)

    20* Perl, Python, Rubi, Basic, LISP, Algol, Dylan, Prolog, PostScript, Scheme, Simula, Smalltalk, ML eModula-3 (na maior parte suporta controle manual em alguns mdulos)

  • Coleta de lixo De acordo com a especificao da linguagem Java, uma

    JVM precisa incluir um algoritmo de coleta de lixo para reciclar memria no utilizada (objetos inalcanveis) A especificao no informa qual algoritmo deve ser usado

    apenas que deve existir um A mquina virtual HotSpot, da Sun, usa vrios algoritmos e

    permite diversos nveis de ajuste* O comportamento desse algoritmo o principal gargalo

    na maior parte das aplicaes de vida longa Em mdia: 2% a 20% do tempo de execuo de uma aplicao

    tpica gasto com coleta de lixo Conhecer os detalhes do funcionamento do algoritmo de coleta

    de lixo importante para saber como ajust-lo para melhorar a eficincia de um sistema

    21* Novos algoritmos so suportados a cada nova verso

  • Desafios da coleta de lixo Distinguir o que lixo do que no lixo

    Algoritmos exatos garantem a identificao precisa de todos os ponteiros e a coleta de todo o lixo

    Algoritmos conservadores faz suposies e pode deixar de coletar lixo que pode no ser lixo (possvel memory leak)

    Todos os coletores usados nas JVMs atuais so exatos

    Influncia da coleta em alocaes posteriores A remoo de objetos deixa buracos no heap (fragmentao) Para alocar novos objetos, preciso procurar nas listas de

    espaos vazios (free lists) um que caiba o prximo objeto: alocao ser mais demorada e uso do espao ineficiente.

    Alguns algoritmos compactam o heap, movendo os objetos para o incio do heap e atualizando os ponteiros: torna a alocao mais simples e eficiente, porm so mais complexos.

    22

  • Algoritmos para coleta de lixo Contagem de referncias

    Reference counting algorithm: mantm, em cada objeto, uma contagem das referncias para ele; coleta os objetos que tm contagem zero

    Cycle collecting algorithm: extenso do algoritmo de contagem de referncia para coletar ciclos (referncias circulares)

    Rastreamento de memria Mark and sweep algorithm: rastreia objetos do heap, marca o

    que no lixo e depois varre o lixo (libera memria) Mark and compact algorithm: extenso do algoritmo Mark and

    Sweep que mantm o heap desfragmentado Copying algorithm: divide o heap em duas partes; cria objetos

    em uma parte do heap e deixa outra parte vazia; recolhe o que no lixo e copia para a rea limpa, depois esvazia a rea suja

    23

  • Estratgias de coleta de lixo Algoritmos combinados

    Estratgias usam ou baseiam-se em um ou mais dos algoritmos citados para obter melhores resultados em um dado cenrio

    Classificao quanto organizao da memria Generational (objetos transferidos para reas de memria

    diferentes conforme sobrevivem a vrias coletas de lixo) Age-oriented (algoritmos diferentes conforme idade dos objetos)

    Classificao quanto ao nvel de paralelismo Serial Incremental Concorrente

    Principal argumento de escolha: eficincia vs. pausas

    24

  • Metas ajustveis

    25

    Eficincia (throughput): tempo til / tempo de faxina Taxa entre o tempo em que uma aplicao passa fazendo sua

    funo til dividido pelo tempo que passa fazendo coleta de lixo Ideal que seja a maior possvel

    Pausas: quando o mundo pra (stop-the-world) Tempo em que a aplicao inteira (todos os threads) da

    aplicao param para roda o GC e liberar memria Ideal que seja o menor possvel

    Como alcanar essas metas? Escolhendo um coletor de lixo adequado (diferentes estratgias

    usam algoritmos diferentes, de formas diferentes) Configurando parmetros que modificam o espao usado,

    influenciando a forma como o coletor gerencia memria

  • Contagem de referncias (RC*) o algoritmo mais simples [Collins 1960] Cada objeto possui um campo extra que conta quantas

    referncias apontam para ele Compilador precisa gerar cdigo para atualizar esse campo

    sempre que uma referncia for modificada

    Funcionamento: Objeto criado em thread ativo: contagem = 1 Objeto ganha nova referncia para ele (atribuio ou chamada de

    mtodo com passagem de referncia): contagem++ Uma das referncias do objeto perdida (saiu do escopo onde foi

    definida, ganhou novo valor por atribuio, foi atribuda a null ouobjeto que a continha foi coletado): contagem--

    Se contagem cair a zero, o objeto considerado lixo e pode ser coletado a qualquer momento

    26*RC = Reference Counting

  • Contagem de referncias (1) Cada seta que chega em um objeto contada como uma referncia

    para ele (independente de onde tenha vindo)

    HeapConjunto raiz

    27

    3 1

    1 1

    1

    3 1

    1

    1

    1

    1

    0

    1

    1 1

    1

    2 0

    2

    1

    1

    1 1

    1

    1

    1

    a

    b

    c

    d

    e

  • Contagem de referncias (2) Referncias circulares impedem que contagem caia

    para zero quando deveria. Memory leak! Objetos inalcanveis que

    no sero coletados!HeapConjunto raiz

    28

    1 1

    1 1

    1

    2 1

    1

    1

    1

    1

    0

    0

    1 1

    1

    1 0

    1

    0

    0

    0 0

    0

    2

    1

    b = c;

    e saiu de escopo {...}

    a = null;a

    b

    c

    d

    e

  • RC: consideraes Vantagens

    Rpido: no precisa varrer o heap inteiro (s espao ocupado) Pode executar em paralelo com a aplicao

    Desvantagens do RC clssico Overhead alto Paralelismo caro Incapacidade de recuperar ciclos (objetos que mantm

    referncias circulares entre si)

    Solues Coletores incrementais RC on-the-fly [Levanoni-Petrank 2001]

    reduzem overhead e custo do paralelismo, sem pausas Algoritmo eficiente de Coleta de Ciclos [Paz-Petrank 2003] ou

    backup com algoritmo de rastreamento (MS ou MC)

    29

  • Coleta de ciclos (CC) Contagem de referncias clssica no recolhe ciclos Coleo de ciclos baseia-se em duas observaes

    Obs1: Ciclos-lixo s podem ser criados quando uma contagem caipara valor diferente de zero

    Obs2: Em ciclos-lixo, toda a contagem devido a ponteiros internos

    Portanto, objetos que tem contagem decrementada paravalores diferente de zero so candidatos (obs1)

    Algoritmo realiza trs passos locais nos candidatos1. Mark: marca apenas objetos que tm ponteiros externos (obs2)2. Scan: varre o ciclo a partir do objeto candidato com ponteiro

    externo e restaura a marcao de objetos que forem alcanveis3. Collect: coleta os ns cuja contagem for zero

    30

  • CC: identifica candidatos remoo

    31Candidato: reduziu de 3 para 2

    Candidato: reduziu de 2 para 1

    1 1

    1 1

    1

    2 1

    1

    1

    1

    1

    0

    0

    1 1

    1

    1 0

    1

    0

    0

    0 0

    0

    Conjunto raiz Heap

    2

    1

    b = c;

    e saiu de escopo {...}

    a = null;a

    b

    c

    d

    e

    Candidatos: objetos cuja contagem foi decrementada para valor diferente de zero

  • CC: passo 1 - mark Navega nas referncias a partir do candidato e conta

    apenas as referncias externas ao ciclo contagem de referncias externas

    32

    0 0

    0 0

    0

    1 0

    0

    0

    0

    0

    0

    0

    1 1

    1

    1 0

    1

    0

    0

    0 0

    0

    Conjunto raiz Heap

    2

    1

    b = c;

    e saiu de escopo {...}

    a = null;a

    b

    c

    d

    e

    Uma referncia externa

  • CC: passo 2 - scan Restaura contagem dos ns que forem acessveis

    atravs das referncias externasinaccessveis

    33

    0 0

    0 0

    0

    2 1

    1

    1

    1

    1

    0

    0

    1 1

    1

    1 0

    1

    0

    0

    0 0

    0

    Conjunto raiz Heap

    2

    1

    b = c;

    e saiu de escopo {...}

    a = null;a

    b

    c

    d

    e

    accessveis (contagem restaurada)

  • CC: consideraes Vantagens

    Trabalha com objetos ativos (no precisa pesquisar todo o heap) Pode trabalhar em paralelo com a aplicao (no pra tudo)

    Desvantagens Ineficiente se houver muitos ciclos (precisa passar trs vezes por

    cada um deles) Quando trabalha em paralelo, precisa garantir atomicidade das

    etapas de coleta de ciclos (complexo em multiprocessadores)

    Solues que usam CC Efficient age-oriented concurrent cycle collector [Paz et al. 2005]

    Uso experimental apenas (Jikes RVM) A JVM HotSpot no tem, at o momento, empregado nenhum

    tipo de algoritmo de contagem de referncias (at Java 5.0)

    34

  • Algoritmos de rastreamento* Marcam as referncias que so alcanveis (navegando a

    partir do conjunto raiz), e remove todas as que sobrarem

    HeapConjunto raiz

    35

    a

    b

    x

    x x

    x

    x

    x x x

    x

    x

    x

    x

    x

    c

    d

    e

    * tracing

  • Algoritmo Mark and Sweep (MS)

    o mais simples algoritmo de rastreamento (tracing) executado quando a memria do heap atinge um nvel

    crtico (ou acaba) Todos os threads da aplicao param para execut-lo

    Comportamento chamado de Stop-the-World

    Originalmente projetado para a linguagem LISP pelo seucriador [McCarthy 1960]

    Duas fases Mark: navega pelos objetos alcanveis a partir do conjunto raiz

    e deixa uma marca neles Sweep: varre o heap inteiro para remover os objetos que no

    estiverem marcados (lixo), liberando a memria

    36

  • MS: o heap antes da coletaa

    bReferncias do conjunto

    raiz

    37Heap

  • MS: fase de marcao: Mark

    X

    X

    XX

    X

    Xa

    b

    Objetos que o garbage collectorno conseguiu alcanar

    38Heap

  • MS: fase da faxina: Sweepa

    b

    Objetos que no foram marcados foram varridos do heap!

    39Heap

  • MS: alocao de novos objetosa

    bc

    H fragmentao no heap! A utilizao ineficiente!

    Esta a primeira parte do heap onde o objeto cabe

    40Heap

  • MS: consideraes

    Vantagens No precisa de algoritmo complicado para remover objetos com

    referncias circulares Pode ser mais rpido que contagem de referncias se heap no

    for excessivamente grande e objetos morrerem com freqncia

    Desvantagens Interrompe a aplicao principal (provoca pausa) Fragmentao pode aumentar a freqncia em que o CG

    ocorre, com o tempo Precisa visitar todos os objetos alcanveis na fase de

    marcao e varrer o heap inteiro para localizar objetos no marcados e liberar a memria

    41

  • 42

    Algoritmo Mark-Compact (MC)[Edwards]

    Algoritmo de rastreamento baseado no algortmo mark-sweep (MS) Acrescenta um algortmo de compactao que no

    provoca fragmentao de memria Duas fases

    Mark: idntica ao mark-sweep Compact: objetos alcanveis so movidos para

    frente at que a memria que ocupa seja contgua Tambm Stop-the-World

    Precisa interromper a aplicao para rodar

  • MS: fase de marcao: Mark

    X

    X

    XX

    X

    Xa

    b

    Objetos que o garbage collectorno conseguiu alcanar

    Igual a Mark-Sweep

    43Heap

  • MC: fase de compactao: Compacta

    b

    Objetos marcados so movidos para os espaos vazios do incio do heapA compactao requer

    execuo de algoritmo adicional (mais

    complexo que MS)

    44Heap

  • MC: alocao de novos objetosa

    bc

    Heap de objetos contguos: mais

    eficiente!

    45Heap

  • MC: consideraes Vantagens

    No causa fragmentao da memria: alocao rpida e performance no se degrada com o tempo devido ao aumento das coletas

    Desvantagens Continua sendo Stop-the-World e pausas tendem a ser maiores

    que as pausas em MS O algoritmo de compactao tem overhead (requer vrias

    visitas) e mais complicado de implementar em CGsconcorrentes (multiprocessadores)

    Veja exemplo grfico interativo de algoritmo Mark-Sweep-Compact (applet Java Heap of Fish) http://www.artima.com/insidejvm/applets/HeapOfFish.html (Bill

    Venners, do livro Inside the Virtual Machine) [Venners]

    46

  • 47

    Algoritmo de cpia: CA Copying algorithm [Chenney 1970] Divide o heap em duas reas iguais chamadas

    de origem (from space) e destino (to space) Funcionamento

    1. Objetos so alocados na rea from2. Quando o coletor de lixo executado, ele navega

    pela corrente de referncias e copia os objetosalcanveis para a rea to

    3. Quando a cpia completada, os espaos to e from trocam de papel

  • CA: antes da coletaa

    b

    Heap dividido em duas partes (no necessariamente, iguais mas geralmente de tamanho similar)

    Desperdcio: h metade do espao anterior para alocao de novos objetos!

    48Heap origem: From Heap destino: To

  • CA: copia objetos alcanveisa

    b

    Objetos que forem alcanveis a partir do conjunto raiz so copiados medida em que so encontrados

    Referncias so atualizadas

    49Heap origem: From Heap destino: To

  • CA: esvazia e troca de papela

    50

    b

    Toda a rea de memria do heap origem liberada

    Troca de ppis: a rea do heap que era destinotorna-se origem e a origem torna-se destino

    Alocao passa a ocorrer em outra rea do heap

    Heap destino: To Heap origem: From

  • AC: alocao de novos objetosa

    51

    b

    c

    No h fragmentao.

    Heap de objetos contguos torna novas alocaes mais eficientes!

    Mas metade do heap no utilizado

    Heap destino: To Heap origem: From

  • AC: consideraes Vantagens

    Cpia rpida, principalmente se a quantidade de objetosalcanveis for pequena (o que comum)

    No precisa visitar o heap inteiro: apenas objetos alcanveis No fragmenta a memria do heap

    Desvantagens Aplicao precisa parar (stop-the-world) enquanto o algoritmo

    est sendo executado (como em qualquer algoritmo de rastreamento); verso concorrente [Baker] tem menos pausas

    Dobra a necessidade de memria do heap: um problema se o heap necessrio for muito grande; heaps menores (com metadedo tamanho normal) podem disparar o GC com mais freqncia, reduzindo o throughput

    Uso ineficiente de memria (metade est sempre vazia)

    52

  • Comparao (em coletor serial)

    Contagem de referncias

    Coleo de ciclos

    Mark-sweep

    Mark-compact

    Copying

    permit

    e uso

    total d

    o heap

    usado

    no Ho

    tSpot J

    VM**

    fragm

    enta o

    heap

    coleta

    todo o

    lixo

    precis

    a para

    r a ap

    licao

    *

    precis

    a varr

    er hea

    p inteir

    o

    sim

    sim

    sim

    no

    sim

    sim

    sim

    no

    no

    sim

    no

    sim

    sim

    sim

    no

    sim

    sim

    sim

    sim

    no

    no

    sim

    sim

    no

    no

    no

    sim

    sim

    sim

    no

    Em vermelho, geralmente um critrio negativo

    53* no funciona de forma incremental (stop-the-world) ** at verso 5.0

  • 3. Estratgias de coleta de lixo

    Coletores modernos combinam vrios algoritmos em estratgias mais complexas Aplicando algoritmos diferentes conforme as idades e

    localizao dos objetos Utilizando tcnicas que possibilitem a coleta de lixo paralela

    (algoritmos incrementais e concorrentes)

    Nesta seo apresentaremos as principais estratgias usadas (e propostas) para coletores seriais e paralelos Generational garbage collection (usada na JVM HotSpot) Age-oriented garbage collection (em fase experimental)

    Ambas baseiam-se na idade dos objetos para tornar as coletas mais eficientes

    54

  • Vida dos objetos Observaes empricas

    1. Se um objeto tem sido alcanvel por um longo perodo, provvel que continue assim

    2. Em linguagens funcionais, a maior parte dos objetos morre pouco depois de criados

    3. Referncias de objetos velhos para objetos novos so incomuns

    Concluso Pode-se tornar mais eficiente o coletor de lixo se

    analisando os objetos jovens com mais freqncia que os objetos mais velhos

    55

  • Mortalidade infantil dos objetos Objetos morrem jovens!

    A maior parte, pouco depois de serem alocadosColetas menores Coletas maiores (Full GC)

    b

    y

    t

    e

    s

    s

    o

    b

    r

    e

    v

    i

    v

    e

    n

    t

    e

    s

    56

    bytes alocadosFonte: Sun [Sun 05]

  • Generational GC[Lieberman-Hewitt 83] e [Ungar 84]

    Classifica objetos em diferentes geraes: G0, G1, ... G0 contm objetos jovens recm-criados Pressupe-se que a maior parte dos objetos jovens (90%) lixo

    antes da prxima coleta Gn varrida mais freqentemente que Gn+1 Objetos sobreviventes so promovidos para a gerao seguinte

    As geraes mais velhas devem ser maiores que as geraes mais novas Tipicamente so exponencialmente maiores

    Implementaes tpicas usam apenas duas geraes Gerao jovem (G0) Gerao estvel (G1)

    57

  • Fundamentos do Generational GC

    Duas hipteses Mortalidade infantil dos objetos: a maior parte dos

    objetos (95%) morre pouco depois que so criados Haver poucas referncias de objetos mais velhos

    para objetos mais jovens As geraes so reas do heap

    Gerao jovem: rea menor, onde inicialmente alocada a memria para novos objetos

    Gerao antiga, ou estvel: rea maior, para onde so copiados objetos que sobrevivem a uma ou mais coletas de lixo na rea menor

    58

  • Ponteiros entre geraes Quando um objeto criado, suas referncias geralmente

    apontaro para objetos mais antigos Se houver ponteiros entre geraes, provavelmente sero da

    gerao nova para a gerao velha

    Pode acontecer de um objeto antigo receber referncia para um objeto novo algum tempo depois de criado Neste caso o sistema precisa interceptar modificaes em

    objetos antigos e manter uma lista de referncias Isto deve ocorrer raramente (se ocorrer com freqncia, as

    coletas menores sero demoradas)

    Na HotSpot JVM, usada uma tabela de referncias Gerao antiga dividida em blocos de 512kb (cards) Alteraes so interceptadas e blocos so marcados Coletas menores verificam apenas blocos marcados

    59

  • Generational GC: algortmos Usa mais de um algortmo, uma vez que cada gerao

    possui tamanhos e comportamentos diferentes Gerao jovem

    90% dos objetos esto mortos rea total do heap usado pequeno Algoritmo de cpia a melhor opo pois seu custo

    proporcional aos objetos ativos

    Gerao estvel Pode haver muitos objetos ativos e rea grande No h unanimidade quanto ao algoritmo Pesquisas recentes exploram o uso de algoritmos de contagem

    de referncia (CC) com coletas freqentes e incrementais HotSpot usa MS (na verso concorrente) e MC

    60

  • Funcionamento: generational GC

    61

    Ilustrando caso tpico (h muitas variaes) Duas geraes (G0: jovem e G1: estvel) Algoritmo de cpia usado na gerao jovem

    Quando cada gerao enche, ocorrem coletas de lixo Parciais na gerao jovem, e completas no heap inteiro

    GC Parcial: A gerao jovem enche primeiro, j que acumula objetos mais rapidamente Quando a gerao jovem enche, causa uma coleta menor, que

    rpida (proporcional ao nmero de objetos ativos) Sobreviventes da coleta sero copiados para a gerao antiga

    GC Completa: A gerao antiga cresce ao receber os sobreviventes da gerao jovem. Vrios iro morrer. Depois de vrias coletas menores, a gerao antiga enche Quando encher, haver uma coleta maior (lenta) no heap inteiro

  • Funcionamento ilustrado Gerao jovem recebe novas alocaes at encher Quando a gerao jovem enche ocorre a coleta que copia os objetos

    sobreviventes para a gerao estvel Coleta na gerao estvel mais demorada, porm menos freqente

    62

    a

    a

    b d

    c

    b

    c

    e

    Geraojovem

    Geraoestvel

    Refernciasraiz

    Primeira coleta da gerao jovem

    Segunda coleta da gerao jovem

    Novasalocaes

    Objetossobreviventes

    1 32

  • Consideraes Vantagens

    Pausas menores: coletas rpidas e freqentes distribuem as pausas que podem tornar-se imperceptveis

    Eficincia (throughput): a coleta concentra-se nas reas de memriaonde o lixo se encontra, gastando menos tempo

    Desvantagens Pequena gerao jovem pode causar incio mais lento devido a muitas

    coletas curtas (baixa eficincia) Coleta na gerao antiga ainda lenta e algoritmos usados atualmente

    ainda no conseguem eliminar pausas Implementaes

    Na JVM HotSpot, gerao antiga usa diversos algortmos (MC, MS) H pesquisas usando RC (CC) para coletar gerao antiga

    eficientemente: [Azatchi-Petrank 03] e [Blackburn-Mckinley 03] com implementaes experimentais testadas no Jikes RVM

    63

  • Age-oriented[Paz, Petrank & Blackburn 2005]

    Divide objetos em geraes Ocupam tamanho varivel do heap Sempre coleta heap inteiro

    Busca reduzir pausas com concorrncia Implementao recomendada usa

    Algoritmo de rastreamento (cpia) na gerao jovem (da mesma forma que implementaes tpicas do Generational GC)

    Algoritmo de contagem de referncias (CC) na gerao antiga

    Inicialmente gerao jovem ocupa todo o espao Alta eficincia (demora ocorrncia de primeira coleta)

    Gerao antiga cresce com coletas Pequena gerao antiga com mais objetos ativos que mortos e

    pouca atividade permite eficincia mxima do algoritmo CC

    64

  • Generational vs. Age-oriented

    Generational Gerao jovem menor que gerao velha Faz coletas freqentes apenas na gerao jovem Faz coleta do heap inteiro, com algoritmo diferente,

    aps vrias coletas da gerao jovem Age-oriented

    Gerao jovem maior que gerao velha Sempre coleta o heap inteiro, usando algoritmos

    diferentes para cada gerao

    65

  • Generational vs. Age-oriented

    Velha Velha Velha Velha VelhaGenerational

    66

    Velha

    JovemJovem

    Velha

    JovemYoung

    Young

    Age-Oriented

    Velha

    Jovem

    Velha

    Jovem

    JovemJovem Jovem Jovem Jovem

    tempo

    Fonte: [Paz, Petrank & Blackburn 2005]

  • Consideraes Vantagens

    Maior gerao jovem possvel (coletas raras e menos pausas) Cada gerao tratada diferentemente (eficincia)

    Desvantagens Pausas sero longas na gerao jovem se no for usado um

    coletor concorrente (usando algoritmo de cpia concorrente) Coleta na gerao antiga ser ineficiente se for usado algoritmo

    de rastreamento (ideal usar contagem de referncias)

    Suporte Experimental (objeto de pesquisa atual) No suportado por nenhuma JVM HotSpot no momento Implementao em Jikes RVM obteve performance melhor que

    implementao HotSpot

    67

  • 4. Coleta de lixo em paralelo H trs* estratgias de coleta de lixo quanto

    execuo paralela do coletor de lixo Coleta serial: o coletor ocorre em srie com a aplicao,

    parando o mundo (stop-the-world) quando precisar liberar memria

    Coleta incremental (on-the-fly): o coletor executa em paralelo realizando coletas pequenas (no necessariamente completas) sempre que possvel, usando vrios threads visando menos (ou zero) pausas

    Coleta concorrente: o coletor realiza suas principais tarefas em um processador ou thread exclusivo (pode parar todos os threads para marcar, se necessrio) visando maior eficincia

    68* HotSpot divide em quatro, devido a diferentes estratgias para geraes individuais

  • Parando o mundo Os algoritmos seriais de rastreamento precisam parar

    todos os threads para realizar coleta de memria Rastreamento: qualquer estratgia que use MC, MS ou CA

    Por que preciso parar o mundo? Enquanto o thread de rastreamento varre o heap procura de

    objetos alcanveis, alguns dos j marcados poderiam tornar-se inalcanveis se o programa principal no fosse interrompido

    Por que no usar os algoritmos de contagem de referncia (RC e CC) ? uma soluo. Podem operar em paralelo sem parar tudo Ainda esto pouco maduros (so foco atual de pesquisas) Atualmente so usados apenas experimentalmente; possvel

    que venham a ser usados no futuro nas JVMs HotSpot

    69

  • Rastreamento incremental Os algoritmos de rastreamento mostrados no podem

    ser usados em sistemas de tempo real pois introduzem a qualquer momento pausas de durao imprevisvel Sistemas de tempo real requerem tempos de resposta

    previsveis e determinsticos

    Para usar coleta de lixo em sistemas de tempo real preciso eliminar totalmente as pausas!

    Soluo: buscar algoritmos capazes de executar em paralelo e no interferir na execuo da aplicao Solues baseadas em contagem de referncias RC/CC Verses incrementais de algoritmos de cpia e MS/MC Rastreamento baseado em marcao tricolor (TCM)

    70

  • Marcao tricolor (TCM)[Dijkstra 76]

    Um algoritmo de rastreamento que atribui um entre trs estados (cores) a um n do grafo de objetos Principal algoritmo de coleta de lixo incremental

    Cores e tipos de n Branco: n e seus filhos (objetos ao qual se refere) ainda no

    alcanados (no foram marcados) Cinza: n j foi alcanado (e marcado), mas seus filhos ainda

    no foram Preto: n e seus filhos j foram alcanados e marcados

    No final da fase de marcao do algoritmo, os ns que ainda esto marcados com a cor branca podem ser coletados com segurana

    71* Tri-Colour Marking

  • TCM: funcionamento1. Inicializao

    Inicialmente todos os ns so brancos (inalcanveis) O conjunto de referncias raiz marcada cinza

    2. Rastreamento e marcao 1 (cinza): Quando o coletor encontra um caminho entre um n cinza e um

    n branco, pinta o n branco de cinza Prossegue recursivamente at encontrar todos os objetos

    alcanveis a partir dele, pintando cada um de cinza

    3. Rastreamento e marcao 2 (preto): Quando todos os caminhos de um n cinza levam a ns cinza

    ou pretos, o n pintado de preto

    4. Reciclagem e liberao de memria: Quando no houver mais ns cinzas, todos os ns alcanveis

    foram encontrados. Os ns brancos restantes so reciclados.72

  • TCM (1): inicializao Todos os ns inicialmente marcados como brancos referncias raiz em cinza

    HeapConjunto raiz

    73

    a

    b

    c

    d

    e

  • TCM (2): marcao cinza

    74

    Conjunto raiz Heap

    No tem referncias brancas

    Ainda tem referncias brancas

    a

    b

    c

    d

    e

  • TCM (3): marcao preta

    75

    Conjunto raiz

    No tm mais referncias brancas

    Ainda tem referncias brancas

    Heap

    a

    b

    c

    d

    e

  • TCM (4): marcaes recursivasBrancos que sobraram sero

    coletados pois so inaccessveisHeapConjunto raiz

    76

    a

    b

    c

    d

    e

  • TCM (5): reciclagem dos brancosHeap final contm apenas

    objetos ativosHeapConjunto raiz

    77

    a

    b

    c

    d

    e

  • Invariante tricolor Um objeto preto nunca poder ter referncias

    para objetos brancos Quando aplicao gravar uma referncia entre um n

    preto e um branco, o coletor precisar pintar ou o n pai ou o n filho de cinza

    Quando a aplicao quiser ler um n branco, ele tem que ser pintado de cinza

    Para realizar isto, o sistema precisa Rastrear gravaes em ns pretos (usando uma

    barreira de gravao write barrier) Rastrear leituras em ns brancos (usando uma

    barreira de leitura read barrier) 78

  • TCM: consideraes Vantagens

    Possibilidade de uso incremental e eliminao de pausas na coleta de lixo (permite uso em aplicaes de tempo real)

    Melhor performance aparente

    Desvantagens Sincronizao complexa entre a aplicao e o coletor de lixo Barreiras podem dificultar a implementao em diferentes

    sistemas e diminuir a eficincia (menos throughput)

    Suporte em JVMs Atualmente, em mquinas virtuais Java usado apenas

    experimentalmente (HotSpot JVM no usa este algoritmo; usa verses incrementais de outros algoritmos de rastreamento)

    79

  • Train algorithm[Hudson & Moss 92]

    Algoritmo incremental usado para coleta de gerao estvel em sistemas que usam Generational GC

    Divide a memria em blocos de tamanho fixo Metfora: blocos menores so vages e colees de tamanho

    arbitrrio desses blocos so trens Trens e vages so ordenados por idade; os mais antigos so

    coletados enquanto novos trens e vages se formam Entre a formao e coleta, atualiza-se referncias entre objetos Muito ineficiente com objetos populares (objetos que tm muitas

    referncias) que podem ocorrer com freqncia nas geraes estveis; verses eficientes podem ter pausas pequenas

    O Train algorithm usado na JVM HotSpot Mas parou de ser mantido a partir da verso 1.4.2

    80

  • Snapshots e Sliding Views

    81

    Coletores paralelos precisam trabalhar com heaps que mudam durante a coleta Enquanto um thread marca os objetos outro thread pode estar

    liberando referncias (gerando lixo) preciso trabalhar com modelos estticos do heap (snapshots

    ou sliding views) e coletar de forma incremental

    Snapshots (concurrent GC) Precisa parar todos os threads

    para obter um modelo do heapem determinado momento

    Sliding views (on-the-fly GC) Pra um thread de cada vez,

    em tempos desencontrados para obter a viso do heap(sem pausa na aplicao)

    Snapshots simultneos

    Pausa na aplicao

    Sliding views

    Tempo GC Tempo Aplicao

  • On-the-fly GC (incremental) rea de pesquisa emergente

    Contagem de referncia (CC) torna-se mais popular com heapsgrandes (j que pesquisa objetos vivos) e sistemas paralelos (onde suas desvantagens diminuem)

    Vrios artigos recentes RC (CC) on-the-fly com sliding views [Levanoni-Petrank 01] Mark Sweep on-the-fly com sliding views [Azatchi-Levanoni 03] On-the-fly cycle collection [Paz et al 2003] On-the-fly generational collector [Domani et al 2000]

    Implementaes Todas experimentais (Jikes RVM) Podem aparecer em verses futuras de VMs comerciais de Java

    (e tambm de C#)

    82

  • Concurrent GC (rastreamento) Algoritmo de cpia concorrente

    Cpia incremental ([Baker 78]): ponteiros so lidos apenas em to_space; se ponteiro estiver em from_space na leitura, primeiro copia objeto depois obtm ponteiro

    Algoritmo similar usado pela HotSpot JVM para coletar paralelamente a gerao jovem (mais sobre isto na seo seguinte). Veja [Flood et al 2001].

    Mark-sweep concorrente Usado pelo HotSpot JVM para coletar paralelamente a gerao

    antiga (mais na seo seguinte) [Printezis 00] Causa fragmentao (no compacta) Causa pausa pequena para obter snapshot (pra todos os

    threads ao mesmo tempo) Verso com compactao em desenvolvimento [Flood et al 01]

    83

  • Concluses Existem muitas estratgias de coleta de lixo

    H muito, muito mais do que foi exposto aqui

    Embora o programador Java no tenha a opo de escolher qual usar, as JVMs podem permitir essa escolha e configurao

    Muito pode mudar nas prximas verses das JVMsexistentes atualmente H muitas estratgias experimentais que podero ser usadas

    em verses futuras, em diferentes plataformas H estratgias antigas caindo em desuso

    Conhecer o funcionamento dos principais algoritmos ajudar a configurar e ajustar a performance da JVM em diferentes tipos de aplicaes

    84

  • Referncias: algoritmos (artigos, 1)[Collins 60] G. Collins. A Method for Overlapping and Erasure of Lists, IBM, CACM, 1960.

    Algoritmo de contagem de referncias.[McCarthy 60] J. McCarthy. Recursive Functions of Symbolic Expressions and Their

    Computation by Machine, Part I, MIT, CACM, 1960. Artigo original do Mark-Sweepalgorithm (em Lisp).

    [Edwards] D.J. Edwards. Lisp II Garbage Collector. MIT. AI Memo 19. ftp://publications.ai.mit.edu/ai-publications/0-499/AIM-019.ps. Mark-Compact.

    [Cheney 70] C. J. Cheney. A Nonrecursive List Compacting Algorithm. CACM, Nov 1970. Artigo original do copying algorithm.

    [Baker 78] H. G. Baker. List processing in real time on a serial computer. CACM, Apr 1978. Uma verso concorrente do copying algorithm.

    [Lieberman-Hewitt 83] H. Lieberman, C. Hewitt. A Real Time Garbage Collector Based onthe Lifetimes of Objects. CACM, June 1983. Artigo principal do Generational GC.

    [Dijkstra 76] E. W. Dijkstra, L. Lamport, et al. On-the-fly Garbage Collection: An Exercise inCooperation. Lecture Notes in Computer Science, Vol. 46. 1976. Tri-color marking(citado em [Jones & Lins 95]).

    [Ungar 84] David Ungar. Generation Scavenging: A Non-disruptlve High Performance Storage Reclamation Algorithm. ACM, 1984. Um dos artigos do Generational GC.

    85A maioria dos artigos pode ser obtido via ACM Portal (www.acm.org), CiteSeer(http://citeseer.ist.psu.edu/), sites da Sun, MIT ou IBM, ou localizados via Google

  • Referncias: algoritmos (artigos, 2)[Hudson & Moss 92] R. Hudson, J.E.B. Moss. Incremental Collection of Mature

    Objects, ACM/IWMM, Sep 1992. Artigo do Train algorithm.[Domani 00] T. Domani et. al. A Generational On-The-Fly Garbage Collector for Java,

    IBM, 2000.[Printezis 00] Tony Printezis and David Detlefs. A Generational Mostly-concurrent

    Garbage Collector, 2000. Algoritmo usado no HotSpot.[Flood et al 02] Christine Flood et al. Parallel Garbage Collection for Shared Memory

    Multiprocessors. Sun Microsystems. Usenix, 2001. Algoritmos usados no HotSpot.[Bacon-Rajan 01] D. Bacon, V. T. Rajan. Concurrent Cycle Collection in Reference

    Counted Systems. IBM, 2001.[Levanoni-Petrank 01] Y. Levanoni, E. Petrank. An On-the-fly Reference Counting

    Garbage Collector for Java, IBM, 2001.[Azatchi 03] H. Azatchi et al. An On-the-Fly Mark and Sweep Garbage Collector Based

    on Sliding Views. OOPSLA 03, ACM, 2003.[Paz 05] H. Paz et al. Efficient On-the-Fly Cycle Collection. IBM (Haifa), 2005.[Paz-Petrank-Blackburn 05] H. Paz, E. Petrank, S. Blackburn. Age-Oriented

    Concurrent Garbage Collection, 2005.

    86

  • Referncias: outros tpicos Gerncia de memria

    [Memory] The Memory Management Reference. http://www.memorymanagement.org/. Vrias referncias e textos sobre gerncie de memria em geral.

    Mquina virtual da Sun[JVMS] T. Lindholm, F. Yellin. The Java Virtual Machine Specification, second edition,

    Sun Microsystems, 1999. Formato de memria, pilha, heap, registradores na JVM.[Sun 05] Sun Microsystems. Tuning Garbage Collection with the 5.0 Java[tm] Virtual

    Machine. 2005. Generational GC e estratgias paralelas no HotSpot.[HotSpot] Sun Microsystems. The Java HotSpot Virtual Machine, v1.4.1, Technical

    White Paper. Sept. 2002. Algoritmos usados no HotSpot.[Printezis 05] Tony Printezis. Garbage Collection in the Java HotSpot Virtual Machine.

    http://www.devx.com/Java/Article/21977, DevX, 2005. Livros

    [Jones & Lins 96] R. Jones, R.Lins. Garbage Collection: Algorithms for AutomaticDynamic Memory Management. Wiley 1996. Vrias estratgias de GC explicadas.

    Simulaes[Venners] Bill Venners, Inside the Virtual Machine. Applet Heap of Fish:

    http://www.artima.com/insidejvm/applets/HeapOfFish.html

    87

    2005, Helder da Rochawww.argonavis.com.br

    Gerncia de Memria em JavaParte I: Arquitetura da JVM e algoritmos de coleta de lixoPor que gerenciar memria?Gerencia de memria? Em Java?Assuntos abordados1. Anatomia da JVMJava esconde detalhes da memriaA pilha, o heap e a JVMSegmentao de memria virtual:esquema lgico de baixo nvelAnatomia da JVM: reas de dadosO registrador PCPilhas da JVMQuadros de pilha (frames)Quadros correntes e chamadasVariveis locaisPilha de operandosCdigo Java e instrues de pilhaO heaprea de mtodosFerramenta javap2. Algoritmos de coleta de lixoColeta de lixoDesafios da coleta de lixoAlgoritmos para coleta de lixoEstratgias de coleta de lixoMetas ajustveisContagem de referncias (RC*)Contagem de referncias (1)Contagem de referncias (2)RC: consideraesColeta de ciclos (CC)CC: identifica candidatos remooCC: passo 1 - markCC: passo 2 - scanCC: consideraesAlgoritmos de rastreamento*Algoritmo Mark and Sweep (MS)MS: o heap antes da coletaMS: fase de marcao: MarkMS: fase da faxina: SweepMS: alocao de novos objetosMS: consideraesAlgoritmo Mark-Compact (MC)MS: fase de marcao: MarkMC: fase de compactao: CompactMC: alocao de novos objetosMC: consideraesAlgoritmo de cpia: CACA: antes da coletaCA: copia objetos alcanveisCA: esvazia e troca de papelAC: alocao de novos objetosAC: consideraesComparao (em coletor serial)3. Estratgias de coleta de lixoVida dos objetosMortalidade infantil dos objetosGenerational GCFundamentos do Generational GCPonteiros entre geraesGenerational GC: algortmosFuncionamento: generational GCFuncionamento ilustradoConsideraesAge-orientedGenerational vs. Age-orientedGenerational vs. Age-orientedConsideraes4. Coleta de lixo em paraleloParando o mundoRastreamento incrementalMarcao tricolor (TCM)TCM: funcionamentoTCM (1): inicializaoTCM (2): marcao cinzaTCM (3): marcao pretaTCM (4): marcaes recursivasTCM (5): reciclagem dos brancosInvariante tricolorTCM: consideraesTrain algorithmSnapshots e Sliding ViewsOn-the-fly GC (incremental)Concurrent GC (rastreamento)ConclusesReferncias: algoritmos (artigos, 1)Referncias: algoritmos (artigos, 2)Referncias: outros tpicos