class Lixo{
int y=5;
Short r=5;
public static void main(String...a){
Lixo L=new Lixo(); //1)
Lixo L2=new Lixo();// 2)
L=L2; //3)
3) aqui tenho 3 objetos qualificados para coleta de lixo?
objeto criado la linha 1 mais as suas 2 variaveis de istancia??
ou só 2 Objectos? L e a Short r???
}
}
L e L2 são referências a objetos e não objetos em sÃ.
Para um objeto ser elegÃvel para a coleta de lixo, ele não pode ter nenhuma referência apontando para ele.
Lixo L = new Lixo(); vc cria um novo objeto do tipo Lixo e faz com que L aponte para ele.
Lixo L2 = new Lixo(); vc cria um novo objeto do tipo Lixo e faz com que L2 aponte para ele.
Quando vc faz L = L2, L começa a apontar para o mesmo objeto que L2, sendo assim o objeto que era apontado por L passa a ser elegeÃvel para a coleta, pois ele perde a referência.
Não. Tem apenas um objeto qualificado para coleta, o que era referenciado pela variável L do tipo Lixo, que passou a referenciar o mesmo objeto que L2. O objeto referenciado pela variável de instância r do tipo Short não está qualificado pq ele se encontra (um único objeto) em um pool onde todas as variáveis do tipo Short (inclusive as variáveis de instância r) de mesmo valor* o referenciarão, portanto L2 por fazer referência a um objeto do tipo Lixo com a variável r de mesmo valor do objeto anterior (5) não permite que o objeto Short esteja qualificado para coleta.
Não. Tem apenas um objeto qualificado para coleta, o que era referenciado pela variável L do tipo Lixo, que passou a referenciar o mesmo objeto que L2. O objeto referenciado pela variável de instância r do tipo Short não está qualificado pq ele se encontra (um único objeto) em um pool onde todas as variáveis do tipo Short (inclusive as variáveis de instância r) de mesmo valor* o referenciarão, portanto L2 por fazer referência a um objeto do tipo Lixo com a variável r de mesmo valor do objeto anterior (5) não permite que o objeto Short esteja qualificado para coleta.
Obs.: A coleta de lixo só se refere a objetos, portanto a variável de instância primitiva y não entra nessa discussão.[/quote]
Ok javadev, entao tenho que desconsiderar as variaveis wrapers em situacoes desse tipo beleza!O problema agora que tem essa questao do livro kathy que parece me deu um nó na cabeça!! veja esse codigo
class CardBoard{
Short story=5;
CardBoard go(CardBoard cb){
cb=null;
return cb;
}
public static void main(String...a){
CardBoard c1=new CardBoard();
CardBoard c2=new CardBoard();
CardBoard c3=c1.go(c2);
c1=null;
}
}
resposta certa do livro:
Apenas um objeto esta qualificado para coleta do lixo (c1),mas ele tem um objeto Short que tambem esta qualificado pagina 158 2 edicao
Sei que esse livro tem ums falhas,por isso que questiono .Pode ser um erro do livro? :?:
e Obrigado pela resposta!!
L e L2 são referências a objetos e não objetos em sÃ.
Para um objeto ser elegÃvel para a coleta de lixo, ele não pode ter nenhuma referência apontando para ele.
Lixo L = new Lixo(); vc cria um novo objeto do tipo Lixo e faz com que L aponte para ele.
Lixo L2 = new Lixo(); vc cria um novo objeto do tipo Lixo e faz com que L2 aponte para ele.
Quando vc faz L = L2, L começa a apontar para o mesmo objeto que L2, sendo assim o objeto que era apontado por L passa a ser elegeÃvel para a coleta, pois ele perde a referência.
[quote=fabioEM]resposta certa do livro:
Apenas um objeto esta qualificado para coleta do lixo (c1),mas ele tem um objeto Short que tambem esta qualificado pagina 158 2 edicao
Sei que esse livro tem ums falhas,por isso que questiono .Pode ser um erro do livro?
e Obrigado pela resposta!![/quote]
É muito provável que seja erro do livro. Essa questão a que vc se refere já foi discutida aqui no fórum questionando-se exatamente essa situação. Se eu encontrá-la te passo o link.
ok muito obrigado javadev realmente tavo numa duvida cruel!!!Tem algum livro ou site mesmo, que tu posso me indicar com relação esse assunto "otimizacao do compilador java ,pool "?Por exemplo Onde fica o pool e coisa do tipo?acho muito bacana mas nao incontro nada na net a nao ser em ingles