Coletor de lixo

Como pode ser notado, não há qualquer referência a gerenciamento (alocação/liberação) de memória neste tutorial. Isto é porque Ruby utiliza um mecanismo conhecido como coletor de lixo para gerenciar a memória. A primeira linguagem a usar coletor de lixo foi LISP, por volta de 1960. O coletor de lixo se encarrega de encontrar áreas de memória (ocupadas por objetos) não mais em uso, e as libera. Isto, além de liberar o programador desse aborrecimento, evita erros e pode melhorar o desempenho, pois otimizar a alocação e liberação de memória não é uma tarefa fácil para pessoas, principalmente quando muitos objetos estão envolvidos, e os algoritmos de coleta de lixo já são bastante eficientes.

Muitas outras linguagens usam este mecanismo, principalmente linguagens interpretadas. Alguns exemplos são Smalltalk, LISP, Perl, Python, Java, TCL, Lua.

Porém, o coletor de lixo pode ter algumas desvantagens. Uma delas é que o programador tem menor controle sobre a gerência de memória, nos casos em que isto se faz necessário. Outra, referente à técnica de coleta conhecida como "contagem de referências" (reference counting), que é usada nos interpretadores de Perl e Python, por exemplo, é que pode haver "vazamento" de memória (memory leaking), devido a referências circulares. Outro problema, referente à técnica conhecida como "marca e varre" (mark and sweep), que é usada em Ruby e LISP, por exemplo, é que é difícil saber o momento exato e a ordem em que os objetos são destruídos, e isso impede a definição de destrutores (destructors) em certos casos. Mas, em geral, a coleta de lixo é muito útil e facilita muito a vida do programador, sem incorrer em custos significativos na grande maioria dos casos.

Observação:

Existem bibliotecas que fornecem mecanismos de coleta de lixo para linguagens sem suporte nativo, como C e C++.

Referências:

topo da página

<< Página Anterior | índice | Próxima Página >>

nossos tutoriais

navegue

livros recomendados