Maison interface Web js tutoriel Une brève analyse du mécanisme de tas et de garbage collection

Une brève analyse du mécanisme de tas et de garbage collection

Jul 03, 2020 am 09:20 AM
垃圾回收机制

Dans cet article, nous nous concentrons principalement sur ces questions : Une fois le programme Java exécuté, quand les objets du tas seront-ils recyclés ? Comment recycler ?

Le tas est également appelé « tas GC ». Puisque les collectionneurs utilisent désormais essentiellement des algorithmes de collecte générationnelle, le tas Java peut également être subdivisé en : nouvelle génération et ancienne génération, Le rapport est de 1 : 2 ; pour être plus détaillé, la nouvelle génération est divisée en zone Eden et zone Survivant, et le rapport est de 8 : 1. La figure suivante montre la structure du tas :

L'allocation de mémoire pour les objets dans le tas est strictement réglementée, la stratégie est la suivante :

  • les objets allouent d'abord de la mémoire dans la zone Eden de nouvelle génération

  • Les objets volumineux entrent directement dans l'ancienne génération, principalement des chaînes longues et des tableaux qui nécessitent une grande quantité d'espace mémoire continu

  • objets survivant à long terme ; entrez dans l’ancienne génération. Lorsque la mémoire dans la zone Eden est insuffisante, la JVM lance un MinorGC et l'âge de l'objet est augmenté de un. L'âge par défaut de l'objet atteint 15 et entre dans l'âge ancien ; >Détermination dynamique de l'âge. La somme des tailles de tous les objets du même âge est supérieure à la moitié de l'espace Survivant. Les objets supérieurs ou égaux à cet âge entrent dans l'ancienne génération

  • Le GC nouvelle génération fait référence au GC mineur. La collecte des déchets est effectuée dans la nouvelle génération, fréquemment et rapidement. Le GC d'ancienne génération (Major GC/Full GC) effectue le garbage collection dans l'ancienne génération, généralement accompagné d'au moins un gc mineur. Lent. Le GC complet sera déclenché dans les situations suivantes :

Espace insuffisant dans l'ancienne génération

    Espace insuffisant dans la zone méthode
  1. Appelez System.gc(), il est recommandé que la JVM effectue un gc complet
  2. Transfert long ; -terme objets survivants à l'ancienne génération, espace insuffisant

  3. Il n'y a pas assez d'espace contigu alloué pour les gros objets ;

    Il y a trop d'objets qui survivent à la collecte des ordures dans la nouvelle génération, et S1 ne peut pas les intégrer. L'espace garanti dans l'ancienne génération est insuffisant. L'espace garanti fait référence au fait que l'espace continu maximum disponible soit insuffisant. l'espace de l'ancienne génération est plus grand que l'espace total de tous les objets de la nouvelle génération.
  4. Presque tous les objets sont placés dans le tas, alors comment savoir si ces objets sont toujours utiles ? La JVM propose deux méthodes pour déterminer :

Méthode de comptage de références

 : L'objet ajoute un compteur de référence. Chaque fois qu'il est référencé, la valeur du compteur augmente de un. Lorsque la référence devient invalide, la valeur du compteur diminue de un. Lorsque le nombre de références est de 0, cela signifie que l'objet n'est pas vivant. La méthode de comptage de références ne peut pas résoudre le problème de référence circulaire. Il existe des exemples détaillés dans le livre du professeur Zhou Zhipeng, qui sont relativement faciles à comprendre.
  • Méthode d'analyse de l'accessibilité

  • : En prenant l'objet "GC Roots" comme point de départ, tout comme le nœud racine d'un arbre, chercher vers le bas. Le chemin parcouru par la recherche est appelé chaîne de référence s'il n'y a pas de chaîne de référence depuis un objet jusqu'au départ. point de GC Roots, alors ceci L'objet est inaccessible et doit être recyclé. Les racines GC font référence aux objets référencés par la pile de machines virtuelles, aux objets référencés par la pile de méthodes locale, aux objets référencés par des propriétés statiques dans la zone de méthode et aux objets référencés par des constantes dans la zone de méthode.

Comme mentionné ci-dessus, la survie des objets est liée aux références. Les types de référence sont divisés en références fortes, références douces, références faibles et références virtuelles. Référence forte, objet neuf, l'éboueur ne le recyclera jamais

Références douces, la mémoire de ces objets sera recyclée avant que OMM n'apparaisse dans le système
  • Références faibles, dès que le ramasse-miettes le trouve lorsqu'il l'est ; fonctionne, il sera recyclé immédiatement ;
  • La référence factice est inutile et peut être recyclée à tout moment.

En fait, les objets inaccessibles déterminés par la méthode d'analyse d'accessibilité ne seront pas recyclés immédiatement. L'objet doit être marqué deux fois par avant. il est en fait recyclé . Le premier marquage consiste à juger comme objet inaccessible, puis à effectuer un filtrage. La condition de filtrage est de savoir s'il est nécessaire d'exécuter la méthode finalize() pour cet objet . . Si la méthode finalize() n'est pas remplacée ou si la méthode finalize() a été appelée par la machine virtuelle, la méthode finalize() ne sera appelée qu'une seule fois par le système. Dans les deux cas, il n’y a « pas besoin d’exécuter ». Si nécessaire, cet objet sera placé dans la file d'attente F-Quene, une file d'attente de faible priorité créée automatiquement par la machine virtuelle FinalizerLe thread exécute la méthode finalize(). Durant cette période, le GC effectuera un deuxième marquage à petite échelle sur les objets en F-Quene Si l'objet n'est toujours pas référencé, il le fera. être recyclés. Les objets non filtrés ne sont pas nécessairement recyclés.

Nous savons déjà ce que L'objet est que le temps a été recyclé, alors comment le recycler ? Présentation des quatre algorithmes de collecte des déchets les plus couramment utilisés :

  • Mark-clear : marquez d'abord les objets qui doivent être nettoyés, puis recyclez-les uniformément - pas efficace , générera un grand nombre de fragments discontinus ;

  • Algorithme de copie : divisez la mémoire en blocs et n'utilisez qu'un seul morceau à la fois. objets survivants à un autre Sur une seule pièce

  • Marquage et tri : marquez d'abord les objets survivants, puis déplacez tous les objets survivants vers une extrémité, et nettoyez directement la mémoire en dehors de la limite finale ;

  • Algorithme générationnel, le tas est divisé en la nouvelle génération et l'ancienne génération. Un grand nombre d'objets mourront à chaque fois. la nouvelle génération est collectée, choisissez donc l'algorithme de copie. Le taux de survie de l'ancienne génération est relativement élevé et il n'y a pas d'espace supplémentaire pour la garantie d'attribution, choisissez donc l'algorithme d'effacement des marques ou de tri des marques.

L'algorithme de collecte des ordures est une idée de recyclage de mémoire, et l'implémentation spécifique est un ramasse-miettes. Une brève introduction aux éboueurs couramment utilisés :

  • collecteur série en série. Fil unique, les autres travaux doivent être suspendus pendant la collecte des ordures. Copie pour les nouveaux étudiants, étiquetage pour les anciens. Simple et efficace

  • ParNouveau collecteur. Version multithread de la série ;

  • Parallel Scavenge collector, un collecteur multithread d'algorithme de copie. Faites attention au débit, au temps de code d'exécution du processeur / au temps total du processeur passé. Copie nouvelle génération, tri des marques ancienne génération

  • Série Ancien collector, version ancienne génération

  • Parallel Old collector, l'ancienne version de Parallel Scavenge

  • CMS collector, se concentrant sur la pause la plus courte ; Avec un collecteur simultané, le thread de garbage collection fonctionne (essentiellement) simultanément avec le thread utilisateur. Algorithme de marquage et de balayage

Pour plus de détails sur le éboueur, vous pouvez lire le livre de M. Zhou Zhipeng.

Tutoriel recommandé : "Tutoriel JS"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Un article pour parler du mécanisme de garbage collection en php Un article pour parler du mécanisme de garbage collection en php Aug 26, 2022 am 10:48 AM

Cet article vous donnera une compréhension approfondie du mécanisme de garbage collection en PHP. J'espère qu'il vous sera utile !

Décrypter le mécanisme de gestion de la mémoire et de garbage collection du langage Go Décrypter le mécanisme de gestion de la mémoire et de garbage collection du langage Go Nov 30, 2023 am 09:17 AM

Le langage Go est un langage de programmation efficace, sûr et simultané. La conception du mécanisme de gestion de la mémoire et de garbage collection est également sa caractéristique unique. Cet article décryptera en profondeur le mécanisme de gestion de la mémoire et de garbage collection du langage Go. 1. Gestion de la mémoire Dans le langage Go, la gestion de la mémoire comprend deux aspects : l'allocation mémoire et la libération de mémoire. 1.1 Allocation de mémoire Dans le langage Go, nous allouons de la mémoire via les fonctions intégrées new et make. Parmi eux, new renvoie un pointeur vers la valeur zéro nouvellement allouée, tandis que make renvoie un type spécifié et sa longueur.

Comment résoudre les problèmes courants de libération de mémoire dans les fonctions Java ? Comment résoudre les problèmes courants de libération de mémoire dans les fonctions Java ? May 02, 2024 am 09:57 AM

La gestion de la mémoire en Java implique un garbage collection, mais des problèmes peuvent toujours survenir. Les problèmes courants incluent les fuites de mémoire et la fragmentation de la mémoire. Les fuites de mémoire sont causées par des objets contenant des références qui ne sont plus nécessaires et peuvent être résolues en évitant les références circulaires, en utilisant des références faibles et en limitant la portée des variables. La fragmentation de la mémoire est provoquée par des allocations et des désallocations fréquentes et peut être résolue à l'aide de pools de mémoire, de pools d'objets volumineux et d'un garbage collection compact. Par exemple, l'utilisation de références faibles peut gérer les fuites de mémoire et garantir que le garbage collector récupère les objets lorsqu'ils ne sont plus nécessaires.

Compréhension approfondie des principes de développement sous-jacents de PHP : gestion de la mémoire et mécanisme de garbage collection Compréhension approfondie des principes de développement sous-jacents de PHP : gestion de la mémoire et mécanisme de garbage collection Sep 10, 2023 pm 02:30 PM

Compréhension approfondie des principes de développement sous-jacents de PHP : gestion de la mémoire et mécanisme de garbage collection Introduction : PHP, en tant que langage de programmation de haut niveau, est largement utilisé dans le développement Web. De nombreux développeurs sont familiers avec la syntaxe et les fonctionnalités de PHP, mais peuvent avoir relativement peu de compréhension des principes de développement sous-jacents de PHP. Cet article explorera en profondeur les mécanismes de gestion de la mémoire et de garbage collection dans les principes de développement sous-jacents de PHP pour aider les lecteurs à mieux comprendre le mécanisme de fonctionnement de PHP. 1. Gestion de la mémoire PHP Allocation et libération de la mémoire La gestion de la mémoire en PHP est gérée par le moteur Zend

Une analyse approfondie du mécanisme de garbage collection dans JS Une analyse approfondie du mécanisme de garbage collection dans JS Mar 02, 2023 pm 07:31 PM

Les types primitifs sont stockés sur la pile et les types de référence sont stockés sur le tas. JavaScript alloue automatiquement de la mémoire lorsque des variables (objets, chaînes, etc.) sont créées et les libère « automatiquement » lorsqu'elles ne sont pas utilisées. Le processus de libération est appelé garbage collection.

Une analyse approfondie du mécanisme de garbage collection en Python Une analyse approfondie du mécanisme de garbage collection en Python Mar 29, 2018 pm 01:20 PM

Grâce au mécanisme automatique de récupération de place de Python, il n'est pas nécessaire de libérer manuellement les objets lors de leur création en Python. Ceci est très convivial pour les développeurs et évite aux développeurs de se soucier de la gestion de la mémoire de bas niveau. Mais si vous ne comprenez pas son mécanisme de garbage collection, le code Python que vous écrivez sera souvent très inefficace.

Explorez les fonctionnalités de gestion de la mémoire et le mécanisme de récupération de place du langage Go. Explorez les fonctionnalités de gestion de la mémoire et le mécanisme de récupération de place du langage Go. Jan 23, 2024 am 10:07 AM

Explorer le mécanisme de récupération de place et les fonctionnalités de gestion de la mémoire du langage Go Introduction : Avec le développement d'Internet, les développeurs ont des exigences de plus en plus élevées en matière de langages de programmation. En tant que langage compilé et typé statiquement, le langage Go a attiré beaucoup d'attention depuis sa création en raison de son mécanisme efficace de récupération de place et de ses fonctionnalités de gestion de la mémoire. Cet article vise à explorer en profondeur le mécanisme de garbage collection du langage Go et ses fonctionnalités de gestion de la mémoire, et à aider les lecteurs à mieux comprendre et utiliser ces fonctionnalités à travers des exemples de code spécifiques. 1. Mécanisme de collecte des déchets 1.1 Algorithme de marquage du langage Go

Explorer : Différentes étapes de développement du mécanisme de récupération de place JVM Explorer : Différentes étapes de développement du mécanisme de récupération de place JVM Feb 23, 2024 pm 05:36 PM

Analyse approfondie : L'évolution diversifiée du mécanisme de garbage collection JVM nécessite des exemples de code spécifiques 1. Introduction Avec le développement de l'informatique, le mécanisme de garbage collection joue un rôle vital dans la JVM (Java Virtual Machine). L'évolution diversifiée du mécanisme de récupération de place JVM vise à améliorer les performances et la gestion de la mémoire des programmes Java. Cet article fournira une analyse approfondie de l'évolution spécifique du mécanisme de récupération de place JVM et fournira des exemples de code spécifiques pour aider les lecteurs à mieux comprendre. 2. Principes de base du mécanisme de récupération de place pour expliquer le mécanisme de récupération de place JVM

See all articles