Entendendo o Framework…
Classe - Namespace System – GC (Garbage Collection)

A classe System é fundamental para todo o Framework.NET, existem muitas classes de baixo-nível que estão contidas dentro dela. Dessa forma, podermos controlar e gerenciar memória, operações matemáticas, etc. O Namespace System possui uma hierarquia enorme, porém vamos falar somente sobre a Classe Garbage Collection.

Método (Garbage Collection)

Método Automático de Gerenciamento de Memória

Fazer mais com menos, esse é o negócio certo? Seguindo esse princípio as grandes empresas desenvolvedoras de software estão investindo em produtividade. Portanto, certas tarefas que os programadores até então necessitavam se preocupar, estão sendo incorporadas em softwares cada vez mais inteligentes e dessa forma passando a responsabilidade sobre essas tarefas a ferramenta que o programador escolheu para trabalhar.

Desde os primórdios da programação, um dos principais problemas encontrados foi sem dúvida o gerenciamento de memória. Sempre que precisávamos desenvolver uma aplicação, era necessário tomar todos os cuidados para que a memória não desse “overflow”. A partir da criação do Garbage Collection, esse conceito mudou e trouxe maior flexibilidade ao programador já que o gerenciamento de memória passou a ser automático e totalmente gerenciado por esse método.

O Gerenciamento automático de memória consiste basicamente em o programador não ter mais a necessidade de deslocar os objetos da memória, passando todas as tarefas de coleta de objetos para o método GC que fica em execução em segundo plano analisando todo o fluxo de objetos. Quando o GC percebe que um determinado objeto perdeu suas referências/vínculos, o mesmo é colocado em observação e quando uma nova execução do GC for disparada esses objetos em observação são coletados liberando e deslocando da memória esses objetos.

CL Garbage Collection .NET

Como tudo no .NET são objetos, a forma como a arquitetura trata os objetos foi alterada para sair do modelo de contagem de referência utilizado na arquitetura COM, passando assim, a utilizar o método Garbage Collection para liberação de recursos de memória. Esse método é essencialmente um algoritmo criado para determinar quando termina o ciclo de vida de um objeto. Não é necessário invocar o GC, pois ele funciona automaticamente. Mas você pode invocá-lo manualmente, opção útil quando você precisa destruir um objeto imediatamente. Para invocá-lo, digite:

System.GC.collect()

Mas cuidado! Utilizá-lo constantemente de forma manual, pode trazer um custo elevado para sua aplicação.

Namespace GC

Propriedade/Tipo método

Método

Descrição

Propriedades – estática pública

MaxGeneration

Lista as gerações que o sistema pode suportar.

 

TotalMemory

Exibe o espaço total de byte de objetos alive e podem sobrepor objetos que serão lançados em breve.

Métodos – estática pública

Collect

Método sobreposto pode ser útil ao construir seu próprio sistema de “coleta de lixo”.

 

GetGeneration

Método sobreposto retorna a determinada geração na qual esta um objeto.

 

KeepAlive

Ajuda na migração de código VB 6.0 para VB.NET.

 

RequestFinalizeOnShutdown

Método de trabalho implementado para se chamar um rotina de finalização.

 

SuppressFinalize

Informa o sistema para não finalizar um objeto.

 

WaitForPendingFinalizers

Método que suspende a cadeia de execução atual até que todos os finalizadores da fila sejam executados.

Métodos - estatística pública (métodos herdados do system.object)

Equals

Verifica se o objeto que esta sendo avaliado é a mesma instância do objeto atual.

 

GetHashCode

Retorna função rash para um tipo específico.

 

GetType

Retorna o tipo a partir de um objeto.

 

ToString

Retorna uma string para retornar um objeto.

 

Finalize

Permite limpar antes de o GC chegar ao ponto específico.

 

MemberwiseClone

Cria uma cópia dos membros atuais do objeto.


Podemos utilizar os métodos e as propriedades herdados pelo GC. No exemplo a baixo, vamos controlar manualmente o término de objetos e recursos.

Public Class DisposeMe
Inherits Object
    Public sub Dispose(objName as String)
    Finalize
GC.SupressFinalize(objName)
End Sub

Protected Overrides Sub Finalize()
End Class

Entendendo as gerações

A Garbage Collection faz uma coleta seletiva de lixo do sistema. Através de ciclos de geração esses objetos são destruídos (veja o diagrama a baixo). Seguindo os critérios da tecnologia .NET, os objetos mais novos são os primeiros a serem destruídos, os objetos mais velhos são observados com maior freqüência que as outras gerações. Concluindo, quanto mais um objeto estiver Alive, mais Alive ele deve permanecer.


Diagrama

No diagrama acima, podemos observar o que acontece em cada etapa das gerações.

1º Etapa
Os objetos criados dentro da Geração 0 são observados para saber se saber se estão sendo utilizados.

2º Etapa
Os objetos que ainda estão sendo utilizados na Geração 0 são movidos para a Geração 1 e os novos objetos são colocados na Geração 0.

3º Etapa
Os objetos dentro da Geração 0 que ainda estão em uso, são movidos para a Geração 1 e os que ainda estão em uso na Geração 1 são movidos para a Geração 2 e assim sucessivamente.

CONCLUSÃO

Utilizando GC com habilidade você pode ter ganhos consideráveis de desempenho a sua aplicação.Utilize-o mal  e tenha em mãos um enorme problema.

Até a próxima!


Entre em contato através do email: editormsdnweb@gmail.com