Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouWilian Nazario Alterado mais de 9 anos atrás
1
Departamento de Informática Universidade Federal de Pernambuco
Garbage Collection Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco
2
Gerenciamento Estático
Mais simples. Utilizado na versão original de FORTRAN. A cada vez que um procedimento é chamado utilizam-se as mesmas posições de memória. Alocação decidida em tempo-de-compilação.
3
Alocação Estática: Organização da Memória
Programa Principal Subrotina A Subrotina B Subrotina C
4
Alocação Estática: Chamada a Procedimentos
... z = DSucc (3) w = DSucc (2) Programa Principal DSucc DSucc(n) temp1 = n + n return temp1 Subrotina B Subrotina C
5
Alocação Estática: Chamada a Procedimentos
... z = DSucc(3) w = DSucc(2) Programa Principal DSucc DSucc(3) temp1 = 6 return temp1 Subrotina B Subrotina C
6
Alocação Estática: Chamada a Procedimentos
... z = 6 w = DSucc(2) Programa Principal DSucc DSucc(3) temp1 = 6 return temp1 Subrotina B Subrotina C
7
Alocação Estática: Chamada a Procedimentos
... z = 6 w = DSucc(2) Programa Principal DSucc DSucc(2) temp1 = 4 return temp1 Subrotina B Subrotina C
8
Alocação Estática: Chamada a Procedimentos
... z = 6 w = 4 Programa Principal DSucc DSucc(2) temp1 = 4 return temp1 Subrotina B Subrotina C
9
Alocação em Pilha Surgiu com Algol
Possibilidade de procedimentos recursivos. fac n = n * fac ( n - 1 ) , n > 0 = , otherwise Se ProcA chama ProcB, ProcA nunca termina antes do ProcB. Gerenciamento simples.
10
Alocação em Pilha fac 2 é re-escrito como fac 2 => 2 * fac ( 2 - 1)
=> 2 * (1 * 1) => 2 * 1 => 2
11
Alocação em Pilha: Organização da Memória
Pilha de Registros de Ativação Programa Principal Subrotina A Subrotina B Subrotina A Memória de Trabalho Subrotina A Subrotina C
12
Garbage Collection: Alocação Dinâmica de Memória
Listas: quebra da disciplina de pilha. Uma rotina chamada pode gerar uma estrutura de dados que viva após o término da sua chamada. IPL-5 foi a primeira linguagem a ter listas como tipo primitivos. A falta de um GC foi a causa do seu insucesso. LISP (J.McCarthy ) foi a primeira linguagem a ter GC.
13
Garbage Collection: Organização da Memória
Pilha de Registros de Ativação Programa Principal Subrotina A Subrotina B Subrotina C Subrotina A raiz 2 raiz 1 Memória de Trabalho Heap Lixo
14
Garbage Collection: Mark-Scan (J.McCarthy 1960)
Free-list 1.Todas as célulasestão na free-list Heap
15
Garbage Collection: Mark-Scan (J.McCarthy 1960)
1.Todas as célulasestão na free-list. 2.O processo do usuário usa células Raiz Free-list Heap
16
Garbage Collection: Mark-Scan (J.McCarthy 1960)
1.Todas as célulasestão na free-list. 2.O processo do usuário usa células. 3.A reescrita do grafo gera lixo. Raiz Free-list Heap
17
Garbage Collection: Mark-Scan (J.McCarthy 1960)
3.A reescrita do grafo gera lixo. 4.A free-list fica vazia. Raiz Heap Free-list
18
Garbage Collection: Mark-Scan (J.McCarthy 1960)
3.A reescrita do grafo gera lixo. 4.A free-list fica vazia. 5.Suspenso o processo do usuário. 6.Fá-se a marcação. Raiz Heap Free-list
19
Garbage Collection: Mark-Scan (J.McCarthy 1960)
6.Fá-se a marcação. 7.Fá-se a varredura, retornando as células de lixo a free-list. 8.Retoma-se o processo do usúario Raiz Free-list Heap
20
Garbage Collection: Mark-Scan (J.McCarthy 1960)
Tempo de suspensão do processo do usuário: Grafo_em_uso + Tamanho_da_Heap Imprevisibilidade do tempo de suspensão. Necessita de 1-bit para a marcação.
21
Reference Counting (Collins 1960)
Desenvolvido para LISP. Evita a suspensão do processo de usuário. Efetuado em pequenos passos intercalados com as transformações ao grafo. Exige a inclusão de um contador por célula.
22
Reference Counting (Collins 1960)
NEW: tira uma célula da free-list e conecta-a ao grafo. Free-list B 1 Root C 1 A 2 New(A.esq)
23
Reference Counting (Collins 1960)
NEW: tira uma célula da free-list e conecta-a ao grafo. B 1 Root C 1 1 1 A 2 1 Free-list New(A.esq) 1
24
Reference Counting (Collins 1960)
COPY: copia um ponteiro. Root Copy(C.dir, A->B) C 1 2 A Free-list B 1 1 1 1 1
25
Reference Counting (Collins 1960)
COPY: copia um ponteiro. Root Copy(C.dir, A->B) C 1 2 A Free-list B 2 1 1 1 1
26
Reference Counting (Collins 1960)
DELETE: retira um ponteiro. Root C 1 Delete(A->B) 2 A Free-list B 1 1 1 2 1
27
Reference Counting (Collins 1960)
DELETE: retira um ponteiro. Root C 1 Delete(A->B); Delete(Sons_B) 2 A Free-list B 1 1 1 2 1
28
Reference Counting (Collins 1960)
DELETE: retira um ponteiro. Root Delete(A->B); Delete(Sons_B); Free(B). C 1 2 Free-list A B 1 1 1 1 1
29
Cyclic Reference Counting McBeth 1963
Deleção de ponteiro a cíclo: Root A 2 Delete(Root->A) 1 B
30
Cyclic Reference Counting McBeth 1963
Space-leak. Root A 1 Delete(Root->A) 1 B
31
Cyclic Reference Counting Brownbridge 1985
Algoritmo errado!!!! Root 2 2 2 A B C
32
Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Algoritmo geral!! Root 2 2 2 A B C Delete(Root->A)
33
Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Age em RF > 1 (sharing) Root 1 2 2 A B C Delete(Root->A) Mark_red(A)
34
Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Mark-Scan local Root 1 A B C Delete(Root->A) Mark_red(A) Scan_green(A)
35
Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Busca referências externas. Root 1 A B C Delete(Root->A) Mark_red(A) Scan_green(A)
36
Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Encontrada referência externa. Root 1 A B C Delete(Root->A) Mark_red(A) Scan_green(A)
37
Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Sub-grafo em uso. Root 1 A B C Delete(Root->A) Mark_red(A) Scan_green(C)
38
Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Referências atualizadas. Root 1 2 A B C Delete(Root->A) Mark_red(A) Scan_green(C)
39
Cyclic Reference Counting Martinez-Wachenchauzer-Lins
Busca de lixo reciclável! Root 1 2 2 A B C Delete(Root->A) Mark_red(A) Scan_green(A) Collect_blue(A) Publicado em: Information Processing Letters 1990
40
Lazy Cyclic Reference Counting Lins
Mark-Scan postergado. Root 2 2 2 A B C Delete(Root->A)
41
Lazy Cyclic Reference Counting Lins
Mark-Scan postergado. Root Pilha 1 2 2 A B C Delete(Root->A) Publicado em: Information Processing Letters 1992
42
Lazy Cyclic Reference Counting Lins
Mark-Scan só é chamado se necessário!! Root Pilha 1 2 2 A B C Delete(Root->A)
43
Garbage Collection: Cópia (Fenichel-Yochelson 1969)
A Heap é dividida em dois semi-espaços de igual tamanho. Quando o semi-espaço em uso fica esgotado cópia-se o grafo-em-uso para o outro semi-espaço deixando o lixo para trás.
44
Garbage Collection: Cópia (Fenichel-Yochelson 1969)
heap_1 heap_2 raiz hp
45
Garbage Collection: Cópia (Fenichel-Yochelson 1969)
raiz heap_1 heap_2 hp
46
Garbage Collection: Cópia (Fenichel-Yochelson 1969)
raiz heap_1 heap_2 hp
47
Garbage Collection: Cópia (Fenichel-Yochelson 1969)
raiz heap_1 heap_2 hp
48
Garbage Collection: Cópia (Fenichel-Yochelson 1969)
A cópia é recursiva. Há suspensão do processo de usuário. Eficiente em máquinas com memória virtual. Não necessita de espaço extra na célula para marcação.
49
Garbage Collection: Cópia (Fenichel-Yochelson 1969)
Complexidade computacional proporcional ao grafo-em-uso. Degrada com a ocupância. Compacta os dados sem custo extra. Adequado para células de tamanho variável.
50
Garbage Collection: Cópia (Cheney 1970)
Algoritmo mais amplamente usado. Não utiliza recursividade ou qualquer outra estrutura de dados extra para “lembrar” o caminho da cópia. Utiliza dois apontadores.
51
Garbage Collection: Cópia (Cheney 1970)
raiz heap_1 cp hp heap_2
52
Garbage Collection: Cópia (Cheney 1970)
raiz heap_1 cp hp heap_2
53
Garbage Collection: Cópia (Cheney 1970)
raiz heap_1 cp hp heap_2
54
Garbage Collection: Cópia
O algoritmo de Fenichel-Yochelson faz uma varredura no grafo em profundidade (depth-first). O algoritmo de Cheney varre o grafo breadth-first. Experimentalmente encontra-se que a varredura depth-first traz maior localidade entre as células. Há versões de Cheney depth-first.
55
Garbage Collection: Cópia Generacional.
Otimiza o algoritmo de cópia. Células novas morrem cedo. Células velhas vivem muito. Segrega as células por idade: várias heaps utilizadas. Evidência experimental.
56
Garbage Collection: Cópia Generacional.
Raiz Heap 0 Celulas Velhas Heap 1 Celulas Novas Heap 2
57
Garbage Collection: Cópia Generacional.
Minor Garbage Collection: Heaps mais novas. Mais freqüênte. Major Garbage Collection: Equivalente ao algoritmo original de cópia. Heap mais velha. Problema do algoritmo: ponteiros intergeneracionais sobretudo célula_mais_nova -> célula_mais_velha
58
Parallel Garbage Collection: Cópia - Appel-Ellis-Li (1988)
Baseado em Baker. Usa informação do Sistema Operacional para bloquear páginas de memória. Faltando espaço: Suspende todos os threads do mutador. O coletor varre os objetos ainda não varridos.
59
Parallel Garbage Collection: Cópia - Appel-Ellis-Li (1988)
Faltando espaço: Troca os semi-espaços. Copia os objetos acessíveis para to-space. Proteje as páginas ainda não copiadas. Re-inicia os threads de mutadores. Algoritmo eficiente.
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.