Sobes.tech
Junior — Middle

Quais são as diferenças entre os vários tipos de referências na linguagem Java e como elas afetam a coleta de lixo?

sobes.tech IA

Resposta da IA

Em Java, existem diferentes tipos de referências que influenciam o comportamento do Garbage Collector:

  1. Referência Forte (Strong Reference) — uma referência normal a um objeto. Enquanto existirem referências fortes, o objeto não será removido pelo coletor de lixo.

  2. Referência Suave (Soft Reference) — um objeto com referência suave é removido apenas quando há falta de memória. É usado para caching.

  3. Referência Fraca (Weak Reference) — um objeto com referência fraca pode ser removido na próxima passagem do coletor de lixo, mesmo que existam referências fracas.

  4. Referência Fantasma (Phantom Reference) — usada para rastrear o momento em que um objeto está pronto para ser removido, mas ainda não foi. Permite realizar ações adicionais após a remoção do objeto.

Exemplo de uso de referência fraca:

import java.lang.ref.WeakReference;

public class WeakRefExample {
    public static void main(String[] args) {
        Object obj = new Object();
        WeakReference<Object> weakRef = new WeakReference<>(obj);

        obj = null; // Remove referência forte

        System.gc(); // Executa o coletor de lixo

        if (weakRef.get() == null) {
            System.out.println("Objeto removido");
        } else {
            System.out.println("Objeto ainda acessível");
        }
    }
}

Dessa forma, a escolha do tipo de referência permite controlar o tempo de vida dos objetos e a eficiência do uso de memória.