CodeGym/Cursos Java/Módulo 3/Coleta de lixo em Java

Coleta de lixo em Java

Disponível

Lembre-se do que é coleta de lixo em Java

A coleta de lixo é o processo de recuperar toda a memória de tempo de execução, destruindo objetos não utilizados.

Às vezes, o programador pode esquecer de destruir objetos inúteis e a memória alocada para eles não é liberada. Mais e mais memória do sistema é consumida e, eventualmente, não há mais alocação. Esses aplicativos sofrem de “vazamentos de memória”.

Depois de um certo ponto, não há mais memória suficiente para criar novos objetos e o programa é encerrado de forma anormal devido a OutOfMemoryError .

A coleta de lixo em Java é o processo pelo qual os programas Java gerenciam a memória automaticamente. Os programas Java são compilados em bytecode que é executado na Java Virtual Machine (JVM).

Quando os programas Java são executados na JVM, os objetos são criados no heap, que é a parte da memória alocada para eles.

Enquanto um aplicativo Java está em execução, novos objetos são criados nele. No final, alguns objetos não são mais necessários. Podemos dizer que, a qualquer momento, a memória heap consiste em dois tipos de objetos.

  • Live - Esses objetos são usados, eles são referenciados de algum outro lugar.
  • Morto - esses objetos não são usados ​​em nenhum outro lugar, não há referências a eles.

O coletor de lixo localiza esses objetos não utilizados e os remove para liberar memória.

A coleta de lixo em Java é um processo automático . O programador não precisa marcar explicitamente os objetos a serem excluídos.

Cada JVM pode implementar sua própria versão de coleta de lixo. No entanto, o coletor deve estar em conformidade com a especificação JVM padrão para lidar com objetos presentes na memória heap para marcar ou identificar objetos inacessíveis e destruí-los por meio de compactação.

Acessibilidade do objeto

Para reconhecer um objeto como vivo, a presença de links não é suficiente. Isso ocorre porque alguns objetos mortos podem se referir a outros objetos mortos. Por isso é necessário que entre todas as referências a um objeto, haja pelo menos uma de um objeto “vivo”.

Acessibilidade do objeto

Os coletores de lixo trabalham com o conceito de GC Roots ( raízes de coleta de lixo ) para distinguir entre objetos vivos e mortos. Existem objetos 100% vivos e a partir deles existem links que animam outros objetos e assim por diante.

Exemplos de tais raízes:

  • Classes que são carregadas pelo carregador de classes do sistema.
  • Transmissões ao vivo.
  • Parâmetros de métodos atualmente em execução e variáveis ​​locais.
  • Objetos que são usados ​​como um monitor para sincronização.
  • Objetos que são retidos da coleta de lixo para algum propósito.
  • O coletor de lixo percorre todo o gráfico de objetos na memória, começando nessas raízes e seguindo as referências a outros objetos.

Etapas de coleta de lixo em Java

A implementação da coleta de lixo padrão tem três etapas.

1. Marcar objetos como ativos

Neste ponto, o coletor de lixo (GC) deve identificar todos os objetos vivos na memória percorrendo o grafo do objeto.

Quando visita um objeto, marca-o como disponível e, portanto, vivo. Todos os objetos que não são acessíveis pelas raízes do GC são considerados candidatos à coleta de lixo.

2. Limpando objetos mortos

Após a fase de marcação, o espaço de memória é ocupado por objetos vivos (visitados) ou mortos (não visitados). A fase de limpeza libera os fragmentos de memória que contêm esses objetos mortos.

3. Disposição compacta dos objetos restantes na memória

Não é necessário que os objetos mortos que foram removidos na fase anterior estejam próximos uns dos outros. Assim, você corre o risco de obter um espaço de memória fragmentado (meio vazio).

Mas, claro, tendo previsto isso, é possível compactar a memória no momento em que o coletor de lixo remove os objetos mortos. O restante estará localizado em um bloco contíguo no início do heap.

O processo de compactação facilita a alocação sequencial de memória para novos objetos.

Comentários
  • Populares
  • Novas
  • Antigas
Você precisa acessar para deixar um comentário
Esta página ainda não tem nenhum comentário