DEV Community

FUNDAMENTOS JAVA
FUNDAMENTOS JAVA

Posted on

Ciclo de Vida de Objetos Java

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.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay