Neste tutorial, aprenderemos sobre vários colecionadores de lixo existentes. Em Java, a coleta de lixo é um processo automático que pode substituir os programadores por tarefas complexas, como alocação e reciclagem de memória. Este artigo é o terceiro artigo da série Tutorial de coleta de lixo. Na parte anterior 2, vimos como a coleção de lixo funciona em Java. Esse é um artigo interessante. Eu recomendo que você dê uma olhada. A primeira parte apresenta a coleção de lixo Java, incluindo a arquitetura JVM, o modelo de memória da heap e alguns termos Java.
Java tem quatro tipos de coletores de lixo:
Coletor de lixo em série
Coletor de lixo paralelo
Coletor de lixo simultâneo de varredura (coletor de lixo CMS)
G1 Coletor de lixo
Cada tipo tem seus próprios pontos fortes e fracos. É importante ressaltar que, quando programamos, podemos selecionar o tipo de coletor de lixo através da JVM. Selecionamos passando parâmetros para a JVM. Cada tipo é muito diferente e pode nos fornecer um desempenho completamente diferente do aplicativo. É muito importante entender cada tipo de coletor de lixo e fazer a escolha certa com base na seleção de aplicativos.
1. Coletor de lixo em série
O coletor de lixo em série funciona mantendo todos os threads do aplicativo. Ele foi projetado para um único ambiente de encadeamento e usa apenas um único thread para coleta de lixo e funciona congelando todos os threads de aplicativos, para que não seja adequado para ambientes de servidor. É mais adequado para programas simples de linha de comando.
O coletor de lixo em série pode ser usado através do parâmetro JVM -xx:+useSerialGC.
2. Coletor de lixo paralelo
O coletor de lixo paralelo também é chamado de contrato de transferência. É o coletor de lixo padrão da JVM. Ao contrário dos colecionadores de lixo em série, ele usa multithreading para coleta de lixo. Da mesma forma, também congela todos os tópicos de aplicativos ao executar a coleta de lixo
3. Coletor de lixo concorrente de marcação
A coleção simultânea de lixo de tags usa varredura multithread de memória de heap, marcando instâncias que precisam ser limpas e limpando instâncias marcadas. O coletor de lixo de tag simultâneo manterá apenas todos os threads do aplicativo nos dois casos a seguir.
Quando o objeto de referência marcado está na área de tocar;
Durante a coleta de lixo, os dados na memória da heap são alterados simultaneamente.
O coletor simultâneo de varredura de tags usa mais CPU para garantir a taxa de transferência do programa do que os coletores de lixo paralelos. Se pudermos alocar mais CPU para melhor desempenho do programa, a marcação simultânea no coletor de lixo de varredura é uma opção melhor do que o coletor de lixo simultâneo.
Abra o coletor de lixo de varredura de marcação simultâneo via parâmetro JVM xx: + useParnewgc.
4. G1 coletor de lixo
O coletor de lixo G1 é adequado para situações em que a memória da pilha é grande. Ele divide a memória da pilha em diferentes áreas e o lixo a coleta simultaneamente. O G1 também pode comprimir o espaço de memória de heap restante após recuperar a memória. A varredura simultânea marca o coletor de lixo comprime a memória no caso STW. A coleção de lixo G1 dará prioridade à área com mais lixo na primeira peça.
Use o coletor de lixo G1 via parâmetro JVM xx:+useg1gc
Novos recursos de java8
Ao usar o coletor de lixo G1, use o parâmetro JVM -xx:+usestringdedupplication. Podemos otimizar a memória da heap removendo strings duplicados e mantendo apenas um char []. Esta opção foi introduzida no Java8U20.
Demos a todos os quatro coletores de lixo Java, que é preciso ser usado com base em cenários de aplicativos, desempenho de hardware e requisitos de rendimento.
Configuração da JVM para coleta de lixo
As seguintes configurações de chave JVM estão todas relacionadas à coleção de lixo Java.
Tipo de coletor de lixo executando
| Configuração | descrever |
|---|---|
| -Xx:+useSerialGC | Coletor de lixo em série |
| -Xx:+useParallelGC | Coletor de lixo paralelo |
| -Xx:+useConcmarksweepGC | Coletor de lixo simultâneo de tags |
| -Xx: parallelcmsthreads = | Coletor de lixo de tags simultâneos = número de threads usados |
| -Xx:+useg1gc | G1 Coletor de lixo |
Configuração otimizada do GC
| Configuração | descrever |
|---|---|
| -Xms | Inicialize o tamanho da memória da heap |
| -Xmx | Valor máximo da memória da pilha |
| -Xmn | Tamanho da crônica |
| -Xx: PermSize | Inicialize o tamanho da geração permanente |
| -Xx: maxpermsize | Capacidade máxima de geração permanente |
Exemplo de uso de parâmetros JVM GC
java -xmx12m -xms3m -xmn1m -xx: PermSize = 20m -xx: maxpermsize = 20m -xx:+useSerialgc -jar java-Application.jar.Jar
Resumir
O exposto acima é sobre um breve entendimento dos tipos de coletores de lixo Java neste artigo, e espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!