Avatar ·

Qual é a diferença entre SoftReference e WeakReference em Java?

Olá, colegas! Sou um desenvolvedor Java iniciante e não consigo entender os tipos de referências em Java. Eu sei que existem Strong Reference (referência comum), além de SoftReference e WeakReference. Na prática, entendo que SoftReference é usado para cache e WeakReference para WeakHashMap ou para evitar vazamentos de memória, mas não está clara a fronteira entre eles. Digamos que eu tenha este código: ```java import java.lang.ref.SoftReference; import java.lang.ref.WeakReference; public class ReferenceTest { public static void main(String[] args) { Object strongObj = new Object(); SoftReference softRef = new SoftReference<>(strongObj); WeakReference weakRef = new WeakReference<>(strongObj); strongObj = null; // agora strongObj pode ser coletado pelo GC System.gc(); // pedimos para o GC trabalhar System.out.println("Soft: " + softRef.get()); System.out.println("Weak: " + weakRef