Buscar

Coleta de lixo - Resumo

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Coleta de lixo e o outro tipo de Heap 
A região de memória no qual os objetos são alocados dinamicamente é muitas 
vezes chamado ​de heap . No contexto de coleta de lixo, o significado do termo ​heap 
está é mais semelhante à sua definição no dicionário: “pilha de muitas coisas”. 
 
O que é lixo? 
Nem sempre uma linguagem fornece os meios para destruir um objeto 
explicitamente​. Linguagens que suportam a destruição explícita de objetos 
requerem um programa para controlar os objetos que podem ser destruídos. Se um 
objecto não é destruído, a memória ocupada por esse objeto não pode ser utilizada 
novamente. Um programa que não controla a memória inutilizada pode esgotar o 
espaço disponível, impossibilitando a criação de novos objetos. 
Um objeto não utilizado é chamado ​de lixo e o processo de encontrar todos os 
objetos não utilizados e liberar espaço na memória é chamado de ​coleta de lixo​. 
Reduzir 
Um programa que cria todos os objetos necessários no início da sua execução e 
usa os mesmos objetos até que ele também termina não cria lixo, reduzindo ou 
eliminando a necessidade de recolha de lixo. 
 
Reuso 
Através da reutilização de uma única instância de objeto, a quantidade de lixo 
produzida é reduzida. 
Reciclar 
Essa estratégia deve ser utilizada com cuidado, pois incumbe o trabalho de controle 
de objetos ao desenvolvedor. Em vez de deixar um objeto não utilizado para o 
coletor de lixo, ele é armazenado em uma lista de de objetos não utilizados. Quando 
um novo objeto é necessário, a lista é pesquisada primeiro para ver se um um não 
utilizado já existe, o que reduz a sobrecarga de lixo. 
 
Ajudando o Coletor de Lixo 
Para evitar que o coletor de lixo seja executado com muita frequência, deve-se criar 
lixo o suficiente para que a coleta seja feita poucas vezes, ajudando o coletor de 
lixo. 
 
Contador de referência 
A dificuldade na coleta de lixo é de encontrar o lixo primeiramente. Um objeto é 
considerado lixo quando não existem referências a esse objeto. O algoritmo 
primeiro conta as referências que apontam para aquele endereço de memória, se o 
contador for igual a zero significa que é lixo, pois não há nada apontando pra quele 
endereço, então a memória é liberada. A vantagem de usar contagens de referência 
é que o lixo é facilmente identificado. Não é necessário esperar até que haja 
memória suficiente antes de iniciar o processo de coleta de lixo. 
 
Marca varra 
O lixo é acumulado até que toda a memória disponível foi esgotado. Primeiro se 
suspende a execução do programa, depois varre as memórias e faz uma marcação, 
adicionando um campo booleano em cada objeto, nos espaços que estão sendo 
utilizados. Depois volta pra varrer novamente, o que está marcado desmarca-se, o 
que não está marcado é liberado, pois é lixo. ​O armazenamento alocado para os 
objetos desmarcados é recuperado durante a varredura. Os objetos que um 
programa pode acessar diretamente são aqueles objetos que são referenciados por 
variáveis ​​locais na pilha do processador, e devem ser acessíveis. ​A principal 
vantagem do algoritmo é que ele recolhe todo o lixo. E a desvantagem é que o 
programa deve ser suspenso. 
Para e copia 
Nesse algoritmo, a pilha é dividida em duas regiões separadas: ativa (ocupada) e 
inativa (desocupada). Quando a memória na região ativa está esgotada, o programa 
é suspenso e o algoritmo de coleta de lixo é invocado. Todos os objetos utilizados 
da região ativa são copiados para a inativa, e as referências dos objetos são 
atualizadas. 
Após a cópia for concluída, as regiões trocam seus papéis. Como apenas os objetos 
utilizados foram copiados, o lixo foi deixado pra trás. Então o espaço ocupado pelo 
lixo é recuperado de uma só vez quando a região ativa torna-se inativa. O algoritmo 
desfragmenta automaticamente o ​heap​. As desvantagem do algoritmo é o alto 
processamento e e ele requer o dobro da memória que o programa realmente usa. 
 
Marca e compacta 
A primeira fase é chamada a ​marca de fase. Na segunda fase, o algoritmo 
compacta a ​heap ​movendo todos os objetos em locais de memória contínuas. A 
segunda fase é chamada ​fase de​ ​compactação​. 
Primeiro, as identificações dos objetos são armazenados em uma pilha ​handle​. 
Depois, quando os objetos são movidos, apenas a ​handle ​é modificada, deslizando 
as referências aos objetos para uma das extremidades. Os objetos permanecem 
inalterados.

Outros materiais