Sobes.tech
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.