Dúvida sobre o objeto no Heap

2 respostas
douglas_vidotto

Olá pessoal. Como se sabe um objeto que foi instanciado e perde a referência com sua variável passa a ser passível de ser destruído pelo Garbage Collector (caso não esteja enganado). Portanto, minha dúvida é, quando temos objeto desse tipo:

new objeto().metodo()

o objeto não está ligado a nenhuma variável de referência. Porém, esse objeto não é coletado pelo Garbage Collector, e o método sempre funciona normalmente. Funciona também para todos aqueles exemplos em que instaciamos objetos em construtores:

[/code]BufferedReader reader = new BufferedReader(new FileReader());[code]

Por que isso sempre funciona? Por que o objeto não é destruido antes??

Abraços!

2 Respostas

davidtiagoconceicao

Funciona porque provavelmente a classe tem um atributo interno que referencia este objeto, atribuindo este objeto à referência. Algo mais ou menos assim:

// Código fictício, simplificação do código real
public BufferedReader(FileReader reader){
    // diversas operações
    this.fileReader = reader;
    // outras operações
}

Desta forma, existe uma referência válida para o objeto em questão, portanto, ele não é elegível para coleta.

T

Neste caso ( “new objeto().metodo()” ) a referência permanece somente enquanto o método está sendo executado; depois, ela está disponível para coleta
(obviamente se o método não criar uma referência amarrada em outro objeto. Por exemplo, se o tal método registrar “this” - ou seja, o objeto - em um ArrayList estático, então o objeto irá permanecer amarrado a esse tal ArrayList.)

Criado 27 de fevereiro de 2009
Ultima resposta 27 de fev. de 2009
Respostas 2
Participantes 3