Desmistificando o Garbage Collector

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (2)

 

Neste artigo falaremos sobre Garbage Collector, um novo recurso que foi adotado pela plataforma .net, mas que infelizmente, poucos programadores .net conhecem ou sequer já ouviram falar sobre este recurso.

                                            

Introdução

Quem já programou ou programava em Visual Basic 6 e nas antigas versões do Visual Basic 6 sabe o quanto era chato ter que alocar memória e desalocar memória a toda hora quando era necessário criar objetos. Por exemplo, quando queria se criar uma conexão ADODB teríamos que criar um objeto que armazenaria o objeto ADODB e então este seria alocado fisicamente na memória RAM. Após usarmos o objeto e por fim se não quiséssemos mais usa-lo teríamos que desalocar este objeto da memória deixando a memória livre para ocupar outras coisas.

 

Quando programamos para servidores este tipo de problema se torna extremamente grave, imagine rodar uma aplicação que aloque muitos objetos na memória e não desalocasse os objetos, seria terrível, visto que a memória estaria ocupada por muito tempo até darmos um reboot no servidor, imagine no caso de servidores que não sofrem um reboot há anos.

 

Com a introdução da idéia do Garbage Collector, opção que a plataforma do Java já trazia, as coisas se tornaram melhor e muito confortáveis para os programadores.

 

O Garbage Collector é também chamado de coletor de lixo, falaremos mais sobre ele na próxima seção.

 

Funcionamento do Garbage Collector

O trabalho do Garbage Collector se resume a vasculhar a memória procurando pelo lixo que é deixado na memória, onde este lixo está ocupando espaço, o que se torna desnecessário e prejudicial ao sistema, visto que aquela parte suja da memória poderia estar sendo usada por outro aplicativo.

 

Assim o Garbage Collector gerencia a alocação e a liberação de memória para a aplicação. Quando estamos criando um objeto com a instrução new, estamos alocando para ele no heap, parte da memória utilizada para o armazenamento das estruturas de dados de tamanho e existência não determinada, durante a execução de um programa, espaço na memória física. Assim é alocado na memória até que o heap não tenha mais espaço. Quando o Garbage Collector realiza uma coleção por lixo, ou parte suja da memória, ele verificará se o objeto tem alguma referencia na área heap e se ela esta sendo utilizada, eliminando ela se não estiver.

 

Vale também ressaltar que o Garbage Collector, eventualmente, trabalha em uma coleção no espaço candidato à liberação para disponibilizar memória. A estrutura do Garbage Collector dirá o melhor momento para ele coletar o lixo que está na memória.

 

Porém, nós programadores também podemos ordenar para que o Garbage Collector comece a coletar o lixo na memória na hora que quisermos, é o que veremos na próxima seção.

 

Forçando a Coleta de Lixo

O Garbagge Collector ainda nos permite gerencia-lo de modo que em determinado momento podemos ordena-lo a fazer uma coleta de lixo.

 

Observe que dentro do namespace System existe a classe responsável pelo Garbage Collector, chamada de “GC” de Garbage Collector. Esta classe olhada mais de perto nos permite manipular uma série de métodos para que possamos trabalhar com o Garbage Collector.

 

Caso em determinado momento dentro do nosso programa já tivéssemos usado bastante a memória, manipulado bastante objetos, criando diversos objetos, e quiséssemos forçar a coleta de lixo, ou que o Garbage Collector comece a trabalhar de maneira a liberar a memória ocupada por sujeira, poderíamos utilizar o método estático Collect() situado dentro do namespace System da classe GC.

Para utilizarmos o método poderíamos fazer como no exemplo abaixo:

 

System.GC.Collect();

Listagem 01. Forçando o Gargabe Collector

 

Dessa maneira estamos dizendo para o coletor de lixo do framework .net a coletar o lixo que está na memória e já pode ser desalocado.

 

Conclusão

Se você tinha dúvida, ou não conhecia nada sobre Garbage Collector, bem-vindo a mais uma das novidades que a plataforma .net nos trouxe. Claro que existem aquelas pessoas, acostumadas a trabalhar com C ou C++ achando que o Garbage Collector lhe causam uma certa limitação, para esses ainda existe essa hipótese usando o código não-gerenciado que é disponibilizado utilizando-se a palavra reservada unsafe, assim ainda pode-se trabalhar como se faz com as linguagens de programação C e C++, quem estiver interessado pode pesquisar mais sofre o assunto de código não gerenciado. Entretando, para aqueles que desejam usufruir do Garbagge Colletor esse artigo mostrou-lhe como podemos ganhar bastante com o uso deste recurso, evitando alguns problemas sérios que poderiam ser causados, além disso o GC nos fornece métodos para que podemos trabalhar com ele, forçando-o inclusive a coletar o lixo que esteja ocupando desnecessariamente a memória em um dado instante.

 

Agradeço novamente aos visitantes pelos pedidos e até a próxima.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?