Introdução
Garbage Collector == adeus vazamento de memória? Neste pequenino artigo, vamos mostrar como o Garbage Collector não tem como perceber sempre que você não está usando alguma coisa! Isto é, vai ocorrer um "pseudo" vazamento de memória, ou como conhecemos, memory leak. Claro que esse memory leak pode ser evitado. Aqui você vai aprender a ter um poquinho mais de cautela!
Código
Vou direto para o exemplo mais clássico! Simulando uma pilha com array de Objects!
Sutil. não? Imagine que você populou a sua pilha com 1000 objetos. Depois você começou a dar pop, até esvaziar! Tudo ok? Como você viu, não! Você NÃO está mais utilizando aqueles elementos da pilha, e quem esta utilizando a sua classe provavelmente também não está mais, mas mesmo assim você tem referência para aqueles 1000 objetos, enforcando a memória da sua virtual machine, e fazendo o garbage collector de bobo! Para corrigir isso, é mais que óbvio:
Com este null, o objeto pode ser coletado! Você acha que isto só acontece com arrays, e que você esta a salvo já que usa a poderosa collections framework? Doce ilusão!
Ok, ok, sei que você poderia usar aqui o java.util.Stack, mas o que eu queria era ilustrar que você não está salvo disto acontecer, especialmente quando mexe com coleções e arrays! Sei que este exemplo que acabo de dar, o cara teria de ser beeeem descuidado, já que o push dele não sobreescreve um elemento que já existir, ele faz pior, ele adiciona no meio!!!!! Quem conhece a ArrayList sabe disso! Portanto, muito cuidado! Se você está mexendo em uma coleção, e utilizando algo para apontar um dos objetos, pense se você precisa manter os outros na coleção!
Conclusão
O Garbage Collector é o seu melhor amigo, mas pode deixar você com alguns vícios. Este tipo de problema aparece em inúmeras situações. Você já pode ter implementado algo que "vazasse" memória assim, e nunca percebeu, já que era pequeno. Em uma aplicação grande, isso pode matar a sua JVM! Em um futuro próximo, estamos lançando o tutorial sobre o Garbage Collector básico. E mais para frente, um sobre Weak, Soft e Phantom references do pacote java.lang.ref. É um tópico MUITO interessante para quem gosta de saber como o java realmente funciona!
Fonte: www.guj.com.br - Paulo Silveira
56a27e5d-266f-4dec-a5e6-47cc2156fd08|0|.0