Junior — Middle
Quais etapas de desenvolvimento podem ser distinguidas no ciclo de vida dos objetos na memória gerenciada?
sobes.tech IA
Resposta da IA
O ciclo de vida dos objetos na memória gerida em C# pode ser dividido em várias etapas:
- Criação (Allocation) — o objeto é criado no heap gerido usando o operador
new. - Utilização (Usage) — o objeto é utilizado no programa, e as referências a ele são armazenadas em variáveis.
- Recolha de lixo (Garbage Collection) — quando não há mais referências ao objeto, o recolhedor de lixo marca-o como candidato à remoção.
- Libertação de memória (Finalização e Deallocação) — se o objeto tiver um finalizador (
Finalize), este é chamado antes de libertar a memória; depois, a memória é libertada.
Um ponto importante — o recolhedor de lixo no .NET funciona por gerações (Gen 0, Gen 1, Gen 2), o que otimiza o desempenho e o tempo de limpeza.
Exemplo:
class MyClass {
~MyClass() {
// Finalizador, chamado antes de remover o objeto
}
}
var obj = new MyClass(); // Criação
// Utilização do obj
obj = null; // O objeto deixa de estar acessível
// O recolhedor de lixo libertará a memória mais tarde