Bem-Vindo, Visitante
Username: Password: Lembrar-me
Publique dúvidas e ajude seus colegas com soluções e experiências vivenciadas
  • Página:
  • 1

TÓPICO: Finalizadores e coleta de lixo

Finalizadores e coleta de lixo 10 anos 1 mês atrás #1

  • ronaldo
  • ronaldo's Avatar
  • OFFLINE
  • Administrador
  • Postagens: 22
  • Thank you received: 7
  • Karma: 1
A criação de objetos em Java é realizada explicitamente por meio de construtores. Contudo, a destruição dos objetos, sua remoção da memória, é automática e fica a cargo do coletor de lixo automático (automatic garbage collector), uma tarefa realizada pela JVM, enquanto os programas são executados.

O coletor de lixo procura continuamente por objetos que não são mais referenciados, que provavelmente não serão mais usados, marcando-os para futura remoção, quando a memória que ocupam for necessária para novos objetos. Isso simplifica o trabalho de programação, pois os objetos perdidos são automaticamente removidos à medida em que existe mais demanda por memória. No trecho que segue existe um laço onde são criados objetos. A cada interação um novo objetos é criado, de modo que o anterior fica sem referências, podendo ser marcado para remoção.
// for define um novo laço
for(int i=0; i<100;i++){
// criação de novo objeto, referencia anterior é perdida
Objeto obj = new Objeto();
}
Embora seja impossível prever quando o coletor de lixo irá remover os objetos sem uso, é possível forçar a pesquisa e remoção dos objetos não referenciados com uma chamada ao coletor, mas é necessário destacar que isso não garante a remoção de todos os objetos:
//aciona o coletor de lixo para tentar remoção de objetos não usados
System.gc();

Embora a coleta automática de lixo resolva grande maioria das situações envolvendo a criação e destruição de objetos, existem situações particulares em que o objeto deve devolver recursos alocados do sistema ou encerrar conexões com outros programas (por exemplo, banco de dados). Esses casos pedem a implementação dos finalizadores, métodos cuja assinatura obrigatória é:
protected void finalize(){

}

Todos os finalizadores definidos nas classes são executados pelo coleto de lixo quando os respectivos objetos são removidos da memória. Mas como não se pode prever quando o coletor de lixo irá, de fato, remover os objetos, não existem garantias quanto ao momento de execução dos finalizadores dos objetos quando estes deixam de ser referenciados.

Fonte: Java: Guia do programador, Peter Jandl Júnior
Última Edição: 10 anos 1 mês atrás por ronaldo.
O administrador desabilitou o acesso público de escrita.
  • Página:
  • 1
Tempo de criação da página: 0.175 segundo(s)

Destaques

Links Importantes