Junior — Middle
Quando ocorre a limpeza do objeto referenciado por WeakReference durante o funcionamento do sistema?
sobes.tech IA
Resposta da IA
O objeto ao qual WeakReference se refere torna-se candidato à recolha de lixo quando já não há referências fortes a ele. Nesse momento, o coletor de lixo pode limpar o objeto, mesmo que exista uma referência fraca.
Ou seja, a limpeza do objeto ocorre durante a execução da recolha de lixo se:
- Não houver nenhuma referência forte ao objeto.
- Existirem apenas referências fracas (
WeakReference), que não impedem a recolha de lixo.
Após a limpeza do objeto, WeakReference.get() retornará null.
Exemplo:
val strongRef = SomeObject()
val weakRef = WeakReference(strongRef)
// strongRef existe, o objeto não será recolhido
println(weakRef.get()) // SomeObject
// Removemos a referência forte
strongRef = null
// Após a recolha de lixo, o objeto pode ser limpo
System.gc()
println(weakRef.get()) // null, se o objeto foi recolhido
Assim, a limpeza ocorre no momento da recolha de lixo se o objeto não for mantido por referências fortes.