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.
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 :
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.
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 :
标记-复制算法
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.
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
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é :
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.
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.
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 :
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.
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.
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.
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.
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.
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.