Garbage Collector e Destrutor

3 respostas
dinho12

Caros companheiros, mas uma vez venho pertubar. Como todos sabem sou iniciante em java e me deparei na faculdade com o seguinte problema:
Vantagem e/ou desvantagem do Garbage Collector em relação ao Destrutor. Pesquisando pude perceber que o Garbage Collector limpa os espaços que foram alocados na memórias por objetos que não serão mais utilizados. Quanto ao Destrutor que utilizado me C++, faz o mesmo procedimento, elimiando esses espaços alocados desnecessariamente. Porém, não conseguir distinguir a vantagem o desvantagem de um ou outro. O Garbage collector fornece algo diferente?

Agradeço a atenção de todos.

3 Respostas

B

O Garbage Collector faz isso automaticamente enquanto o destrutores dependem do bom senso do programador.

E digamos que os arquitetos do Garbage Collector sabem mais sobre recolher memória que a maioria dos programadores.

victorwss

dinho12:
Caros companheiros, mas uma vez venho pertubar. Como todos sabem sou iniciante em java e me deparei na faculdade com o seguinte problema:
Vantagem e/ou desvantagem do Garbage Collector em relação ao Destrutor. Pesquisando pude perceber que o Garbage Collector limpa os espaços que foram alocados na memórias por objetos que não serão mais utilizados. Quanto ao Destrutor que utilizado me C++, faz o mesmo procedimento, elimiando esses espaços alocados desnecessariamente. Porém, não conseguir distinguir a vantagem o desvantagem de um ou outro. O Garbage collector fornece algo diferente?

Agradeço a atenção de todos.

Desalocação de memória explícita tende a se tornar um pesadelo quanto maior for o sistema. Frequentemente você cria um objeto, e não sabe qual é a hora de destruí-lo. O destrutor ajuda, mas ele só é invocado depois que você manda destruir o objeto “para que ele possa dizer suas últimas palavras antes de morrer”.

Não é o destrutor que destroi o objeto, é o comando delete que faz. É mais ou menos o seguinte:
O objeto Fulano já está velho e fez tudo o que tinha para fazer. Como ele só está atrapalhando, você (o programador) o manda para o pelotão de fuzilamento (invoca o comando delete). :twisted:
Então, pedem para Fulano diga quais são as suas últimas palavras, faça o seu último pedido, escreva uma carta de despedida, etc. ou seja, o destrutor do objeto é invocado.
O destrutor é executado, Fulano faz a sua última atividade e prepara-se para deixar o mundo. Depois do destrutor ser executado, quem é executado é o objeto: “preparar, apontar e fogo”. Já era. :twisted:
Ou seja, o que determinou a destruição do objeto foi o programador e não o destrutor. O destrutor é uma espécie de callback disso.

Com o coletor de lixo no java, não é muito diferente não. A diferença é que ao invés de você (o programador) mandar o objeto para o pelotão de fuzilamento, a JVM é que decide quem é que deve ir pro saco. O método finalize é equivalente ao destrutor. A vantagem disso é que você não precisa se preocupar em determinar qual é a hora de morrer do objeto, a JVM determina isso sozinha.

dinho12

Mais uma vez agradeço ao apoio de vocês. Com a ajuda dos membros do fórum, mais um dúvida minha foi sanada. Muito obrigado

Criado 27 de março de 2009
Ultima resposta 27 de mar. de 2009
Respostas 3
Participantes 3