Ciclo de Vida de Objetos Java

Java para Iniciantes (Oracle) - Aug 1 - - Dev Community

Em Java, os estados do ciclo de vida de um objeto não são formalmente definidos como em algumas outras linguagens ou frameworks, mas podemos ilustrar uma visão geral desses estados para fins educacionais. Vamos criar uma classe de exemplo para representar cada estado que um objeto pode passar em seu ciclo de vida:

Image description

Ver Exemplo ObjectLifecycle.java no repo
A classe a seguir simula esses estados:

public class ObjectLifecycle {
    public static void main(String[] args) {
        // Estado Created (Criado)
        LifecycleObject obj = new LifecycleObject("MyObject");

        // Estado In Use (Em uso)
        obj.useObject();

        // Estado Invisible (Invisível)
        obj = null;

        // Solicitando a execução do coletor de lixo
        System.gc();

        // Estado Unreachable (Inalcançável) e Coletado (Coletado)
        // O estado Coletado será após a execução do GC.
        // O estado Finalized será ilustrado através do método finalize().
        // O estado Deallocated não é visível diretamente no Java.
    }
}

class LifecycleObject {
    private String name;

    // Construtor: Ilustra o estado Created
    public LifecycleObject(String name) {
        this.name = name;
        System.out.println(name + " created.");
    }

    // Método para ilustrar o estado In Use
    public void useObject() {
        System.out.println(name + " is in use.");
    }

    // Método finalize para ilustrar o estado Finalized
    @Override
    protected void finalize() throws Throwable {
        System.out.println(name + " is being finalized.");
        super.finalize();
    }
}

Enter fullscreen mode Exit fullscreen mode

Explicação dos Estados

- Created (Criado):
Quando new LifecycleObject("MyObject") é chamado, o objeto é instanciado e entra no estado "Created".

- In Use (Em uso):
O método useObject() é chamado, ilustrando que o objeto está em uso.

- Invisible (Invisível):
Quando o objeto é atribuído a null (obj = null;), ele se torna "invisível", pois não há mais referências diretas a ele no código.

- Unreachable (Inalcançável):
O coletor de lixo considera o objeto inalcançável quando não há mais referências ativas a ele. Isso é geralmente identificado quando System.gc() é chamado, mas a execução do GC é indeterminada.

- Collected (Coletado):
O coletor de lixo marca o objeto para remoção da memória. Esse estado ocorre entre o objeto ser inalcançável e o método finalize() ser chamado.

- Finalized (Finalizado):
O método finalize() é chamado antes do objeto ser definitivamente removido. O uso de finalize() não é recomendado devido à sua natureza não determinística e potencial impacto na performance.

- Deallocated (Desalocado):
A memória ocupada pelo objeto é liberada pelo coletor de lixo. Este estado não é diretamente visível no Java, pois o processo de desalocação é gerenciado pela JVM e não é explicitamente notificado ao desenvolvedor.

Observações
- Em Java, o gerenciamento de memória e o ciclo de vida de objetos são gerenciados automaticamente pela JVM, e os estados como "Coletado" e "Desalocado" não são explicitamente controlados pelo desenvolvedor.
- O método finalize() é desaconselhado e será removido em futuras versões do Java. Seu uso é desencorajado porque é não determinístico e pode afetar negativamente o desempenho da aplicação.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terabox Video Player