Hummm analisando bem acho que 1 objeto. Afinal de contas voce instancia um o2 pra poder instanciar um o4 … acho que o o2 vai pro GC pois a variavel referencia apenas o o4 … certo ?
A
arthurnn
vdd vc quis dizer aqui neh?
tb estou achando isso agora… mais e ai!!! como saberemos a vdd??? haha
nbluis
Um…
OO4o4=newOO2().newOO4();
esse new OO2() não é referenciado.
R
repramos
Pois é… é bem essa a dúvida!!!
Eu estava na dúvida se o objeto OO2 era criado e já liberado para o GC.
R
repramos
Obrigado galera.
Omeganosferatu
Entao justamente, por ele nao ser referenciado ele é criado e ja disponibilizado pro GC certo ???
Bom tenho quase certeza que é isso. A menos que esteja muito enganado hehehe…
maquiavelbona
Entao justamente, por ele nao ser referenciado ele é criado e ja disponibilizado pro GC certo ???
Bom tenho quase certeza que é isso. A menos que esteja muito enganado hehehe…
Ele não é disponibilizado tão rápido assim. Quando a primeira vez que o GC for executado, ele identificará que o objeto está “livre” e o marcará para recolhimento. Numa segunda vez que o GC executar, ele será “limpo”, executando o método finalize() do objeto e agora realmente liberando memória. Muita gente ainda acha que logo depois de “liberado” o objeto e logo após a primeira execução do GC a memória será liberada por completo.
A resposta correta é realmente nenhum, porque todos os objetos são referenciados por objetos válidos (não elegíveis)
OO4o4=newOO2().newOO4();
O código acima instância um OO2 para poder instanciar OO4 e embora o objeto OO2 não seja mais usado ele é referenciado por OO4 já que OO4 é uma inner class de OO2. Como tal , mesmo esse objeto auxiliar não é elegível.
R
RafaelVS
Na minha opinição, o objeto “auxiliar” do tipo OO2 criado em
será sim elegível para o GC… pois ele está sendo utilizado apenas para criar OO4 (e sua referência não está sendo colocada em nenhuma variável), o objeto do tipo OO4 criado a partir daquele do tipo OO2 não tem nenhuma referência para ele (o fato de ele ser inner classe não garante isso)…
complementando o comentário do maquiavelbona:
Na verdade, não necessariamente após o método finalize() o objeto será liberado da memória, pois é possível que o método finalize() guarde a referência de this em um outro local (por exemplo, uma variável estática de outra classe) e, nesse caso, ainda não seria recolhido da memória… Além disso, vale lembra rque o método finalize() só é executado uma vez em cada objeto, o que significa que se ele ja executou o finalize() e foi guardada sua referência em um outro local… se pela segunda vez não tivermos mais nenhuma referência ao objeto, quando chegar o momento do GC fazer a coleta o objeto será removido sem executar novamente o método finalize().
[]'s
Flasoft
A resposta é 0(zero objetos estarão disponiveis para o gc).
pensem:
004 é inner de 002 e sendo assim tem acesso às variaveis de instancia e metodos do objeto do tipo 002 à qual ele foi referenciado no momento em que foi instanciado. Apesar de o obj 002 não possuir uma variavel de referencia que o aponte, ainda é possivel que o objeto 004 deseje acessar seus métodos ou variáveis, sendo assim ainda é necessário mante-lo na memória.
Concordam?
Me desejem boa sorte, pq amanhã é meu exame de SCJP…
Omeganosferatu
Pootz quebraram meu paradigma aehuaehuea seis tem certeza???
bom espero que sim
boa sorte na prova…
sergiotaborda
RafaelVS:
Na minha opinição, o objeto “auxiliar” do tipo OO2 criado em
será sim elegível para o GC… pois ele está sendo utilizado apenas para criar OO4 (e sua referência não está sendo colocada em nenhuma variável), o objeto do tipo OO4 criado a partir daquele do tipo OO2 não tem nenhuma referência para ele (o fato de ele ser inner classe não garante isso)…
Garante sim senhor. Dentro de OO4 tenho que poder executar o seguinte código
Para que isto seja possível, OO4 sempre tem uma referencia a OO2 que pode ser obtida com OO2.this . Se tem duvidas use um debugger e veja que existe uma variável dentro do OO4 que aponta para OO2.
1112
O Flasoft e o sergiotaborda estão corretos.
O objeto OO2 criado na linha 18 é referenciado pelo OO4 interno. Ele só não seria se OO4 fosse static, mas aí até a declaração seria diferente.
Essa é uma questão que eu erraria fácil, com minha mania de ler rápido.
R
RafaelVS
Realmente, deixei-me enganar pela questão… o objeto OO2 ainda é referenciado pelo objeto OO4, mesmo não tendo nenhuma referência explícita. :oops:
R
repramos
Pessoal, novamente obrigado.
Flasoft
Arereêee… agora pessoal já sou SCJP 5… 73% na prova de ontem (14/06)…
Valeu e obrigado, obrigado…
R
RafaelVS
aeee parabens!! \o/
caiu uma questao dessa sobre GC com inner nao? hehehe
Flasoft
Não caiu nada de inner class…
Caiu bastante fundamentos(E eu que achava que era bom nisto)… foi onde mais errei. E em Collection que achava que iria ir mau, foi onde foi melhor… vai entender…