Senior
Como ocorre a divisão de objetos nas heaps?
sobes.tech IA
Resposta da IA
No .NET, o heap é dividido em duas gerações principais: Geração 0 e Geração 1. Quando necessário, é criada a Geração 2.
- Geração 0 (Gen 0): Os objetos recém-criados são colocados aqui. É a geração mais jovem e menor. O coletor de lixo (GC) verifica e limpa esta geração com mais frequência. Os objetos que sobrevivem à coleta em Gen 0 são movidos para Gen 1.
- Geração 1 (Gen 1): Contém objetos que sobreviveram à coleta em Gen 0. O GC verifica esta geração com menos frequência do que Gen 0. Os objetos que sobrevivem à coleta em Gen 1 são movidos para Gen 2.
- Geração 2 (Gen 2): Contém objetos de longa duração de Gen 1, bem como objetos grandes. O GC verifica esta geração com menos frequência. A coleta em Gen 2 é a mais custosa em tempo.
- Heap de Objetos Grandes (LOH): Área especial do heap para objetos de 85 KB ou mais. Objetos no LOH não são movidos pelo GC, pois seu deslocamento é muito caro. A limpeza do LOH ocorre junto com a coleta de Gen 2.
A divisão em gerações baseia-se na hipótese de que objetos recém-criados tornam-se lixo mais rapidamente do que objetos de longa duração. Essa abordagem permite que o GC limpe a memória de forma eficiente, concentrando-se nas gerações mais jovens.
// Exemplo de criação de objetos na Geração 0
object obj1 = new object();
string str1 = "Hello";
// Após a primeira coleta de lixo em Gen 0, se obj1 e str1 ainda forem necessários,
// eles podem ser movidos para a Geração 1.
// Objeto de longa duração
List<int> longLivedList = new List<int>();
for (int i = 0; i < 1000; i++)
{
longLivedList.Add(i);
}
// Esta lista pode subir para a Geração 2 com o tempo.
// Objeto grande, que será colocado no LOH
byte[] largeArray = new byte[100 * 1024]; // Tamanho > 85 KB