Compartilhamento de tecnologia

[Algoritmo e coletor de coleta de lixo GC]

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Autor: ofLJli
Link: https://juejin.cn/post/7003213289425633287?searchId=20240709085629749958B21D886D4E67D4
Fonte: Nuggets de Terras Raras
Os direitos autorais pertencem ao autor. Para reimpressão comercial, entre em contato com o autor para autorização. Para reimpressão não comercial, indique a fonte.


Visão geral

As principais estruturas da JVM são: pilha de máquina virtual, heap e área de método. O tamanho do quadro de pilha da pilha da máquina virtual foi determinado pelo compilador. Com o fim do método ou da tecnologia de thread, a memória da pilha da máquina virtual também é reciclada. A área de heap e método Java tem incertezas significativas. A alocação e a reciclagem dessa parte da memória são dinâmicas. O que preocupa o GC é como gerenciar essa parte da memória.

Este artigo se concentra nas três coisas a seguir que o GC precisa realizar:

  • Quando reciclar? (Condições que acionam GC)
  • Algoritmo de coleta de lixo
  • Coletor de lixo

Quando reciclar

De acordo com duas hipóteses geracionais:绝大多数的对象都是朝生夕死熬过越多次的GC回收的对象就越难回收 . A pilha é dividida em gerações: nova geração (Eden, From, To), geração antiga e reciclagem geracional também é realizada durante o GC.

imagem.png

GC menor : Reciclar objetos não utilizados na nova geração A característica da maioria dos objetos da nova geração é que eles vivem e morrem durante a noite. Os tempos de disparo são:

  • Espaço insuficiente na área do Éden aciona o GC Menor. Como o espaço do Éden é limitado em tamanho, o GC Menor é acionado com mais frequência.标记-复制算法Recicle esta área (discutida mais tarde).

GC principal : Recicle objetos não utilizados na geração antiga.uso geral标记-清除算法ou标记-整理算法Reciclar.

GC completo : Recicle objetos não utilizados na área de heap e método. A faixa de reciclagem do Full GC é relativamente grande e o longo tempo de execução pode causar atrasos, portanto, o número de Full GC deve ser reduzido tanto quanto possível. Os tempos de acionamento são aproximadamente os seguintes:

  • Espaço insuficiente na geração antiga é causado por objetos da nova geração que entram na geração antiga, objetos grandes que entram diretamente na geração antiga, etc. Se esses objetos não puderem ser armazenados no espaço máximo contínuo da geração antiga, uma reciclagem completa do GC será realizada .

  • Espaço insuficiente na área do método A área do método armazena principalmente informações de tipo e pools constantes. Também existe o risco de espaço insuficiente e a reciclagem completa do GC será realizada.

  • System.gc() é chamado explicitamente e será reciclado pelo Full GC.

Três algoritmos de coleta de lixo:

1. Algoritmo de marcação e varredura

Princípio: uso可达性分析算法Tornar objetos indisponíveismarcae, em seguida, execute oClaro . Desvantagens: A eficiência da marcação é baixa quando há muitos objetos. Após limpar o objeto, ocorrerá fragmentação da memória e a memória será descontínua. Objetivo: Alguns colecionadores usarão este algoritmo na coleção da geração antiga

2. Algoritmo de marcação-cópia

Princípio: Divida o espaço de memória em dois, metade é usada para armazenamento de objetos e a outra metade é livre.Se a área onde os objetos estão armazenados estiver cheia, use可达性分析算法Mova objetos vivosmarcasair e entãocópia de Vá para outra área vazia e limpe todas as áreas anteriores em espaços vazios contínuos. Desvantagem: Se houver muitos objetos sobreviventes, será necessária uma grande quantidade de cópia e desenvolvimento de memória. O espaço de memória só pode usar metade das vantagens e desperdiçar recursos. Função: Este algoritmo de reciclagem é geralmente usado para objetos que vivem e morrem na nova geração. No entanto, o algoritmo de replicação foi otimizado na nova geração, mas este algoritmo adiciona um mecanismo de garantia de alocação para evitar que muitos objetos sobreviventes sejam alocados. Um algoritmo de reciclagem estilo Appel é usado:

imagem.png

3. Algoritmo de agrupamento de marcação

Princípio: O processo de marcação segue标记-清除算法Igual, então整理存Os objetos vivos se movem para uma extremidade e, em seguida, todos os objetos fora do limite vivo清除 . Desvantagens: Mover objetos envolve algum risco. Muitos objetos são ineficientes. Função: Principalmente na velhice.

imagem.png

Coletor de lixo

O coletor de lixo utilizado pelo GC é utilizado para reciclagem. Com o desenvolvimento contínuo, existem cada vez mais coletores de lixo. Aqui estão os coletores de lixo convencionais e eles são divididos em três categorias: coletor de thread único, coletor de thread único e coletor de lixo simultâneo. dispositivo de coleta.

Coletor de thread único

As combinações de coletores single-threaded são: Serial/Serial Coletor antigo. Eles não apenas usam um encadeamento de coleta para concluir a operação de coleta, mas enquanto o encadeamento de coleta está funcionando, o encadeamento do usuário deve parar de esperar até que a coleta seja concluída. A imagem mostra o diagrama esquemático do coletor Serial/Serial Old:

imagem.png Se os recursos de memória do cliente forem limitados, o número de núcleos do processador for pequeno ou se for um processador de núcleo único, sua simplicidade e eficiência podem fazer com que o coletor conclua seu trabalho o mais rápido possível.

Coletor paralelo multithread

Os coletores multithread incluem: ParNew, Parallel Scavenge e Parallel Old, entre os quais Parallel Scavenge/Parallel Old é um coletor combinado. Esses coletores multithread adicionam apenas threads de coleta de lixo, e os threads do usuário ainda param de esperar pela coleta de lixo.

imagem.png

Coletor parNew: na verdade, é uma versão multithread do Serial. Atualmente, pode cooperar com o coletor Serial e o coletor CMS.

Coletor Parallel Scavenge: Geralmente usado em conjunto com o coletor Parallel Old.Comparado com o coletor parNew, ele presta mais atenção a吞吐量controle, o rendimento éO tempo de execução do thread do usuário é responsável pelo tempo total de execução da CPU, o rendimento é obviamente quanto maior, melhor.

O multithreading geralmente utiliza o servidor, pois a execução do multithreading envolve o tempo de consumo da rotação do intervalo de tempo. Se for um único processador, a eficiência do processamento será sem dúvida mais lenta. Mas é muito bom para recursos, e o lado do servidor dos cálculos de análise que não precisa interagir com o usuário pode aumentar a eficiência de execução.

coletor simultâneo

Os coletores simultâneos incluem: Coletor CMS, que é um coletor que visa manter o tempo de pausa do sistema o mais curto possível e proporcionar uma melhor experiência ao usuário. Seu thread de coleção pode ser executado simultaneamente com o thread do usuário. O CMS tem três标记(marca inicial, marca concorrente, observação) e uma vez清理(Limpeza simultânea), duas das três marcações exigem que o thread do usuário mais curto pare, uma marcação mais longa que seja simultânea ao thread do usuário e a limpeza que seja simultânea ao thread do usuário.

imagem.png

marca inicial: Marque o primeiro objeto associado ao GC Roots, o tempo é muito curto marcação simultânea: Executa a cadeia de referência do GC Roots (algoritmo de análise de acessibilidade) simultaneamente com o thread do usuário, o que leva muito tempo renomear : pesquise a nova cadeia de referência gerada pelo thread do usuário durante a fase de marcação simultânea. Um pouco mais que a marca inicial.Claro simultâneo:usar标记-清除算法Limpe objetos inúteis.

Três desvantagens principais: 1: Sensibilidade da CPU, a simultaneidade pode afetar a operação dos threads do usuário em processadores com um pequeno número de núcleos. 2: Lixo flutuante: O lixo gerado durante a fase de limpeza simultânea só pode aguardar a próxima coleta de GC. Três: Fragmentação de memória, limpeza de marcação Os produtos Puja possuem uma grande quantidade de espaço de memória descontínua.

resumo

Este artigo começa com那些内存需要回收什么时候回收如何回收Como implementação, são escritos dois algoritmos de julgamento de sobrevivência de objetos, condições para reciclagem de área de classe, mecanismo geracional e tempo de coleta de reciclagem, três algoritmos de coleta e coletores de lixo comumente usados.