Coleta de lixo em Java: tudo que você precisa saber



Este artigo sobre Coleta de lixo em Java dá uma ideia clara sobre como funciona, seus tipos e métodos diferentes na coleta de lixo em Java

é uma linguagem de programação de propósito geral e se você chegar a uma situação em que haja dados não utilizados em seu programa e você não souber como lidar com isso, a Garbage Collection em Java será útil. Então, estou escrevendo este artigo para ajudá-lo a lidar com essas funções.

como converter string para data em java

Abordarei os tópicos na seguinte ordem:





Vamos começar!

O que é coleta de lixo em Java?

Em Java, os programadores enfrentam o problema de ter que destruir o objetos que estão fora de uso. Mas com o coletor de lixo, isso pode ser facilmente resolvido. O objetivo principal deste Coletor de lixo é liberar memória heap destruindo os objetos que não contêm uma referência. A técnica é conhecida como Coleta de lixo.



É também considerado um programa que auxilia no gerenciamento automático da memória. Quando são executados na JVM, os objetos são criados no heap, que é, na verdade, uma parte da memória dedicada ao programa. Eventualmente, alguns objetos não serão mais necessários. o coletor de lixo encontra esses objetos não utilizados e os exclui para liberar memória.

  • Os programas que não desalocam a memória podem, eventualmente, ser interrompidos quando não há memória restante no sistema para alocar. Todos esses programas apresentam vazamentos de memória.
  • A coleta de lixo em Java acontece automaticamente durante a vida útil de um programa, eliminando a necessidade de desalocar memória e, portanto, evitando vazamentos de memória.
  • Métodos como livre() em C e excluir() em C ++ são usados, mas, em Java, é executado automaticamente. Assim, fornece melhor gerenciamento de memória.

Agora, vamos entender como essa coleta de lixo automática funciona em Java.

Nota : Um objeto é considerado elegível para a coleta de lixo se estiver inacessível.



Como funciona a coleta de lixo?

A coleta de lixo é um processo de trabalhar com a memória Heap e também marca ou identificar os objetos inacessíveis e destruí-los com compactação.

A coleta de lixo em Java é um processo automático e o programador não precisa marcar explicitamente os objetos a serem excluídos. A implementação reside principalmente no . Cada JVM pode implementar a coleta de lixo. O único requisito é que ele atenda à especificação JVM.

Mesmo que haja muitos JVMs disponíveis, Da Oracle Ponto de acesso é de longe o mais comum, pois oferece um conjunto robusto e maduro de opções de coleta de lixo.

  • O HotSpot possui vários coletores de lixo que são otimizados para vários casos de uso e todos os coletores de lixo seguem o mesmo processo básico.
  • Na primeira etapa, objetos não referenciados são identificados e marcados como prontos para a coleta de lixo.
  • Na segunda etapa, os objetos marcados são excluídos. Opcionalmente, a memória pode ser compactada após o coletor de lixo excluir objetos, de forma que os objetos restantes fiquem em um bloco contíguo no início do heap. O processo de compactação torna mais fácil alocar memória para novos objetos sequencialmente após o bloco de memória alocado para objetos existentes.

Todos os coletores de lixo do HotSpot implementam uma estratégia de coleta geracional que categoriza objetos por idade. A lógica por trás da coleta de lixo geracional é que a maioria dos objetos tem vida curta e estará pronta para a coleta de lixo logo após a criação.

Agora vamos ver quais são os diferentes tipos de coletores de lixo.

Tipos de coletor de lixo

A JVM fornece quatro coletores de lixo diferentes, todos geracionais. Cada um tem suas vantagens e limitações. A escolha de qual coletor de lixo usar é do usuário e pode haver inúmeras diferenças no rendimento e nas pausas do aplicativo.

Existem, nomeadamente, 4 tipos de coletores de lixo.

  • Coletor de lixo serial (GC) :Todos os eventos de coleta de lixo são conduzidos serialmente em um único encadeamento. A compactação é executada após cada coleta de lixo.
  • Paralelo / taxa de transferência GC: Vários threads são usados ​​para coleta de lixo secundária / pequena. Um único encadeamento é usado para a coleta de lixo principal e compactação da velha geração. Além disso, a variante Paralela usa vários encadeamentos para coleta de lixo principal e compactação de geração antiga.
  • Coletor CMS :Vários threads são usados ​​para coleta de lixo pequena / secundária usando o mesmo algoritmo do Paralelo. A maioria da coleta de lixo é multi-threaded, mas o CMS é executado simultaneamente com os processos do aplicativo para minimizar os eventos do aplicativo. Nenhuma compactação é executada.
  • Coletor G1 :Este coletor de lixo tem como objetivo basicamente substituir o CMS. É paralelo e simultâneo como o CMS, mas funciona de maneira bem diferente quando comparado aos coletores de lixo mais antigos.

Vamos entender as vantagens da coleta de lixo em Java.

Vantagens

  • O maior benefício da coleta de lixo Java é que ela automaticamente lida com a exclusão de objetos não utilizados ou alguns objetos que são inacessíveis para liberar recursos de memória.
  • A coleta de lixo é agora um novo componente padrão de muitas linguagens de programação populares.
  • Isso torna o Java eficiente em termos de memória. É porque o coletor de lixo remove os objetos não referenciados da memória heap.
  • Isto é feito automaticamente pelo coletor de lixo que faz parte da JVM.

Melhores Práticas

A melhor abordagem para se adaptar à coleta de lixo Java é definir sinalizadores na JVM. Os sinalizadores têm a capacidade de ajustar o coletor de lixo a ser usado. Isso ajuda a torná-lo o mais adequado para processamento de backend, onde longas pausas para coleta de lixo são aceitáveis.

Outra coisa a se notar aqui é que o coletor de lixo CMS foi projetado para minimizar as pausas, o que o torna ideal para aplicativos de GUI onde a capacidade de resposta é altamente importante. O ajuste fino adicional pode ser realizado alterando o tamanho do heap ou de suas seções e medindo a eficiência da coleta de lixo.

Vamos dar uma olhada neste programa.

class Edureka {int a int b public void setData (int c, int d) {a = cb = d} public void showData () {System.out.println ('Value of a =' + a) System.out.println ('Valor de b =' + b)} public static void main (String args []) {Edureka e1 = new Edureka () Edureka e2 = new Edureka () e1.setData (1,2) e2.setData (3, 4) e1.showData () e2.showData () // Edureka e3 // e3 = e2 //e3.showData () // e2 = null //e3.showData () // e3 = null //e3.showData ()}}

Neste caso, os doisobjetos e duas variáveis ​​de referência são criados. Se você adicionar outro comando e3 = Nulo,duas variáveis ​​de referência apontarão para o mesmo objeto. E se não houver referência à variável, e3 = e2e3.showData () Neste ponto, não há referências apontando para o objeto e ele se torna elegível para a coleta de lixo.

Isso nos leva ao final deste artigo 'Coleta de lixo em Java'. Aprendemos como remover objetos não usados ​​da pilha e os diferentes tipos de coleção.

jenkins vs fantoche vs chef

Se você encontrou este artigo sobre “Coleta de lixo em Java”, verifique o pela Edureka, uma empresa de aprendizagem online confiável com uma rede de mais de 250.000 alunos satisfeitos espalhados por todo o mundo. Estamos aqui para ajudá-lo em cada etapa de sua jornada, criamos um currículo que é projetado para alunos e profissionais que desejam ser um desenvolvedor Java.

Tem alguma questão para nós? Mencione isso na seção de comentários deste “Coleta de lixo em Java ' e entraremos em contato com você o mais rápido possível.