Partage de technologie

[Algorithme et collecteur de récupération de place GC]

2024-07-11

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

Auteur : ofLJli
Lien : https://juejin.cn/post/7003213289425633287?searchId=20240709085629749958B21D886D4E67D4
Source : Pépites de terres rares
Le droit d'auteur appartient à l'auteur. Pour une réimpression commerciale, veuillez contacter l'auteur pour obtenir une autorisation. Pour une réimpression non commerciale, veuillez indiquer la source.


Aperçu

Les principales structures de la JVM sont : la pile de machines virtuelles, le tas et la zone de méthodes. La taille du stack frame de la pile de machines virtuelles a été déterminée par le compilateur. Avec la fin de la méthode ou de la technologie des threads, la mémoire de la pile de machines virtuelles est également recyclée. Le tas Java et la zone de méthode présentent des incertitudes importantes. L'allocation et le recyclage de cette partie de la mémoire sont dynamiques. Ce qui préoccupe le GC, c'est la manière de gérer cette partie de la mémoire.

Cet article se concentre sur les trois choses suivantes que GC doit accomplir :

  • Quand recycler ? (Conditions qui déclenchent GC)
  • Algorithme de collecte des déchets
  • Éboueur

Quand recycler

Selon deux hypothèses générationnelles :绝大多数的对象都是朝生夕死熬过越多次的GC回收的对象就越难回收 . Le tas est divisé en générations : la nouvelle génération (Eden, From, To), l'ancienne génération et le recyclage générationnel est également effectué lors du GC.

image.png

GC mineur : Recyclez les objets inutilisés de la nouvelle génération La caractéristique de la plupart des objets de la nouvelle génération est qu'ils vivent et meurent du jour au lendemain. Les temps de déclenchement sont :

  • Un espace insuffisant dans la zone Eden déclenche le Minor GC. L'espace Eden étant de taille limitée, le Minor GC est déclenché plus fréquemment. Cela nécessite un algorithme de collecte rapide et efficace, qui est généralement utilisé.标记-复制算法Recyclez cette zone (discutée plus tard).

GC majeur : Recyclez les objets inutilisés de l'ancienne génération.usage général标记-清除算法ou标记-整理算法Recycler.

GC complet : Recyclez les objets inutilisés dans la zone du tas et de la méthode. La plage de recyclage Full GC est relativement large et un temps d'exécution long peut entraîner des retards, le nombre de Full GC doit donc être réduit autant que possible. Les temps de déclenchement sont à peu près les suivants :

  • L'espace insuffisant dans l'ancienne génération est dû à des objets de nouvelle génération entrant dans l'ancienne génération, à des objets volumineux entrant directement dans l'ancienne génération, etc. Si ces objets ne peuvent pas être stockés dans l'espace continu maximum de l'ancienne génération, un recyclage Full GC sera effectué. .

  • Espace insuffisant dans la zone de méthode. La zone de méthode stocke principalement les informations de type et les pools constants. Il existe également un risque d'espace insuffisant et un recyclage complet du GC sera effectué.

  • System.gc() est explicitement appelé et sera recyclé par Full GC.

Trois algorithmes de garbage collection :

1. Algorithme de marquage et de balayage

Principe : utilisation可达性分析算法Rendre les objets indisponiblesmarque, puis effectuez laClair . Inconvénients : L’efficacité du marquage est faible lorsqu’il y a de nombreux objets. Après avoir effacé l'objet, une fragmentation de la mémoire se produira et la mémoire sera discontinue. Objectif : Certains collectionneurs utiliseront cet algorithme dans les collections d'ancienne génération

2. Algorithme de marquage-copie

Principe : Divisez l'espace mémoire en deux, la moitié est utilisée pour le stockage d'objets et l'autre moitié est libre.Si la zone où sont stockés les objets est pleine, utilisez可达性分析算法Déplacer des objets vivantsmarquesors et puiscopie Accédez à une autre zone vide et effacez toutes les zones précédentes dans des espaces vides continus. Inconvénient : s’il existe de nombreux objets survivants, une grande quantité de copie et de développement de mémoire sera nécessaire. L'espace mémoire ne peut utiliser que la moitié des avantages et gaspiller des ressources. Fonction : Cet algorithme de recyclage est généralement utilisé pour les objets qui vivent et meurent dans la nouvelle génération. Cependant, l'algorithme de réplication a été optimisé dans la nouvelle génération, mais cet algorithme ajoute un mécanisme de garantie d'allocation pour éviter l'allocation d'un trop grand nombre d'objets survivants. Un algorithme de recyclage de type Appel est utilisé :

image.png

3. Algorithme de marquage-collage

Principe : Le processus de marquage suit标记-清除算法Pareil, alors整理存Les objets vivants se déplacent vers une extrémité, puis tous les objets en dehors de la limite active清除 . Inconvénients : Déplacer des objets comporte certains risques. Trop d’objets sont inefficaces. Fonction : Principalement chez les personnes âgées.

image.png

Éboueur

Le garbage collector utilisé par GC est utilisé pour le recyclage. Avec le développement continu, il existe de plus en plus de garbage collectors conventionnels et ils sont divisés en trois catégories : collecteur monothread, collecteur multithread et simultané. dispositif de collecte.

Collecteur monothread

Les combinaisons de collecteurs monothread sont : Serial/Serial Old collector. Non seulement ils utilisent un thread de collecte pour terminer l'opération de collecte, mais pendant que le thread de collecte fonctionne, le thread utilisateur doit cesser d'attendre que la collecte soit terminée. L'image montre le diagramme schématique du collecteur Serial/Serial Old :

image.png Si les ressources mémoire du client sont limitées, si le nombre de cœurs du processeur est petit ou s'il s'agit d'un processeur monocœur, sa simplicité et son efficacité peuvent permettre au collecteur de terminer son travail le plus rapidement possible.

Collecteur parallèle multithread

Les collecteurs multithread incluent : ParNew, Parallel Scavenge et Parallel Old, parmi lesquels Parallel Scavenge/Parallel Old est un collecteur combiné. Ces collecteurs multithread ajoutent uniquement des threads de garbage collection, et les threads utilisateur arrêtent toujours d'attendre le garbage collection.

image.png

parNew collector : Il s'agit en fait d'une version multithread de Serial. Elle peut actuellement coopérer avec le collecteur Serial et le collecteur CMS.

Collecteur Parallel Scavenge : généralement utilisé en conjonction avec le collecteur Parallel Old.Par rapport au collecteur parNew, il accorde plus d'attention à吞吐量contrôle, le débit estLe temps d'exécution du thread utilisateur représente le temps d'exécution total du processeur, le débit est bien sûr plus grand, mieux c'est.

Le multi-threading utilise généralement le serveur, car l'exécution du multi-threading implique le temps de consommation de rotation des tranches de temps. S'il s'agit d'un seul processeur, l'efficacité du traitement sera sans doute plus lente. Mais c'est très bon pour les ressources, et le côté serveur des calculs d'analyse qui n'a pas besoin d'interagir avec l'utilisateur peut augmenter l'efficacité d'exécution.

collecteur simultané

Les collecteurs simultanés incluent : Le collecteur CMS, qui est un collecteur qui vise à maintenir le temps de pause du système aussi court que possible et à offrir une meilleure expérience utilisateur. Son thread de collection peut s'exécuter simultanément avec le thread utilisateur. CMS a trois标记(note initiale, note concurrente, remarque) et une fois清理(Nettoyage simultané), deux des trois marquages ​​nécessitent l'arrêt du thread utilisateur le plus court, un marquage plus long qui est concurrent avec le thread utilisateur et l'effacement qui est simultané avec le thread utilisateur.

image.png

marque initiale: Marquez le premier objet associé à GC Roots, le temps est très court marquage simultané: Exécuter la chaîne de référence de GC Roots (algorithme d'analyse d'accessibilité) en même temps que le thread utilisateur, ce qui prend beaucoup de temps réétiqueter : Rechercher à nouveau la nouvelle chaîne de référence générée par le thread utilisateur lors de la phase de marquage simultané. Un peu plus long que la marque initiale.Effacer simultanément:utiliser标记-清除算法Effacez les objets inutiles.

Trois inconvénients majeurs : 1 : sensibilité du CPU, la concurrence peut affecter le fonctionnement des threads utilisateur sur les processeurs dotés d'un petit nombre de cœurs. 2 : Déchets flottants : les déchets générés lors de la phase de nettoyage simultanée ne peuvent attendre que la prochaine collecte GC. Trois : Fragmentation de la mémoire, marquage-nettoyage Les produits Puja disposent d'une grande quantité d'espace mémoire discontinue.

résumé

Cet article commence à partir de那些内存需要回收什么时候回收如何回收En tant qu'implémentation, deux algorithmes de jugement de survie d'objet, les conditions de recyclage de la zone de classe, le mécanisme générationnel et le calendrier de collecte du recyclage, trois algorithmes de collecte et les garbage collector couramment utilisés sont écrits.