1 / 61

Garbage Collection

Garbage Collection. Rafael Dueire Lins Departamento de Informática Universidade Federal de Pernambuco. 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.

cora
Download Presentation

Garbage Collection

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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. Programa Principal Subrotina A Subrotina B Subrotina C Alocação Estática:Organização da Memória

  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 = 1 , 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 * fac 1 => 2 * (1 * fac ( 1 - 1)) => 2 * (1 * fac 0) => 2 * (1 * 1) => 2 * 1 => 2

  11. Subrotina A Subrotina A Subrotina A Alocação em Pilha:Organização da Memória Pilha de Registros de Ativação Programa Principal Subrotina B Memória de Trabalho 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 - 1960) foi a primeira linguagem a ter GC.

  13. Subrotina A Subrotina A Garbage Collection:Organização da Memória Pilha de Registros de Ativação Programa Principal Subrotina B Subrotina C 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. 1 2 1 1 1 1 1 Reference Counting (Collins 1960) • NEW: tira uma célula da free-list e conecta-a ao grafo. Free-list B Root C A New(A.esq)

  23. 1 2 1 1 1 1 1 Reference Counting (Collins 1960) • NEW: tira uma célula da free-list e conecta-a ao grafo. B Root C A Free-list New(A.esq)

  24. 1 1 1 1 1 1 2 Reference Counting (Collins 1960) • COPY: copia um ponteiro. Root Copy(C.dir, A->B) C A Free-list B

  25. 1 2 1 1 1 1 2 Reference Counting (Collins 1960) • COPY: copia um ponteiro. Root Copy(C.dir, A->B) C A Free-list B

  26. 1 1 2 1 1 1 2 Reference Counting (Collins 1960) • DELETE: retira um ponteiro. Root C Delete(A->B) A Free-list B

  27. 1 1 2 1 1 1 2 Reference Counting (Collins 1960) • DELETE: retira um ponteiro. Root C Delete(A->B); Delete(Sons_B) A Free-list B

  28. 1 1 1 1 1 1 2 Reference Counting (Collins 1960) • DELETE: retira um ponteiro. Root Delete(A->B); Delete(Sons_B); Free(B). C Free-list A B

  29. 2 1 Cyclic Reference Counting McBeth 1963 • Deleção de ponteiro a cíclo: Root A Delete(Root->A) B

  30. 1 1 Cyclic Reference Counting McBeth 1963 • Space-leak. Root A Delete(Root->A) B

  31. 2 2 2 Cyclic Reference Counting Brownbridge 1985 • Algoritmo errado!!!! Root A B C

  32. 2 2 2 Cyclic Reference Counting Martinez-Wachenchauzer-Lins • Algoritmo geral!! Root A B C Delete(Root->A)

  33. 1 2 2 Cyclic Reference Counting Martinez-Wachenchauzer-Lins • Age em RF > 1 (sharing) Root A B C Delete(Root->A) Mark_red(A)

  34. 0 0 1 Cyclic Reference Counting Martinez-Wachenchauzer-Lins • Mark-Scan local Root A B C Delete(Root->A) Mark_red(A) Scan_green(A)

  35. 0 0 1 Cyclic Reference Counting Martinez-Wachenchauzer-Lins • Busca referências externas. Root A B C Delete(Root->A) Mark_red(A) Scan_green(A)

  36. 0 0 1 Cyclic Reference Counting Martinez-Wachenchauzer-Lins • Encontrada referência externa. Root A B C Delete(Root->A) Mark_red(A) Scan_green(A)

  37. 0 0 1 Cyclic Reference Counting Martinez-Wachenchauzer-Lins • Sub-grafo em uso. Root A B C Delete(Root->A) Mark_red(A) Scan_green(C)

  38. 0 1 2 Cyclic Reference Counting Martinez-Wachenchauzer-Lins • Referências atualizadas. Root A B C Delete(Root->A) Mark_red(A) Scan_green(C)

  39. 1 2 2 Cyclic Reference Counting Martinez-Wachenchauzer-Lins • Busca de lixo reciclável! Root A B C Delete(Root->A) Mark_red(A) Scan_green(A) Collect_blue(A) Publicado em: Information Processing Letters 1990

  40. 2 2 2 Lazy Cyclic Reference Counting Lins • Mark-Scan postergado. Root A B C Delete(Root->A)

  41. 1 2 2 Lazy Cyclic Reference Counting Lins • Mark-Scan postergado. Root Pilha A B C Delete(Root->A) Publicado em: Information Processing Letters 1992

  42. 1 2 2 Lazy Cyclic Reference Counting Lins • Mark-Scan só é chamado se necessário!! Root Pilha 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. heap_1 heap_2 Garbage Collection:Cópia (Fenichel-Yochelson 1969) raiz hp

  45. heap_1 heap_2 Garbage Collection:Cópia (Fenichel-Yochelson 1969) raiz hp

  46. heap_1 heap_2 Garbage Collection:Cópia (Fenichel-Yochelson 1969) raiz hp

  47. heap_1 heap_2 Garbage Collection:Cópia (Fenichel-Yochelson 1969) raiz 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.

More Related