Maison  >  Article  >  Java  >  Quels sont les algorithmes de garbage collection JVM ?

Quels sont les algorithmes de garbage collection JVM ?

青灯夜游
青灯夜游original
2021-04-22 14:58:4032895parcourir

Algorithme de collecte des ordures JVM : 1. Algorithme « Mark-Clear » ; marquez d'abord tous les objets qui doivent être recyclés, puis recyclez uniformément tous les objets marqués une fois le marquage terminé. 2. Algorithme de copie : divisez la mémoire en deux blocs de taille égale et n'en utilisez qu'un à la fois. 3. Algorithme « Marque-Organisation » ; 4. Algorithme de collecte générationnelle.

Quels sont les algorithmes de garbage collection JVM ?

L'environnement d'exploitation de ce tutoriel : système windows7, version java8, ordinateur DELL G3.

Algorithme de récupération de place JVM


Deux concepts :

Nouvelle génération : Un zone où sont stockés des objets à cycle de vie court.
Ancienne génération : un espace où sont stockés des objets à long cycle de vie.

Mêmes points : Tout sur le tas Java

1. Algorithme Mark-clear

Étapes d'exécution :

  • Marquage : Parcourez la zone mémoire et marquez les objets qui doivent être recyclés.
  • Effacer : parcourez à nouveau la mémoire et recyclez la mémoire marquée.

Illustration :

Quels sont les algorithmes de garbage collection JVM ?

Quels sont les algorithmes de garbage collection JVM ?

Inconvénients :

  • Problème d'efficacité ; l'espace mémoire est parcouru deux fois (la première fois est marquée, la deuxième fois est effacée).
  • Problème d'espace : il est facile de générer un grand nombre de fragments de mémoire. Lorsqu'une mémoire plus grande est nécessaire, il ne peut pas trouver un élément qui répond aux exigences, le GC doit donc être redémarré.

2. Algorithme de copie

Divisez la mémoire en deux blocs de taille égale et n'en utilisez qu'un seul. chaque pièce d'horlogerie. Lorsqu'un bloc est épuisé et que GC est déclenché, les objets survivants du bloc sont copiés dans une autre zone, puis la mémoire inutile est immédiatement effacée. La prochaine fois que le GC sera déclenché, les parties survivantes de ce bloc seront copiées dans ce bloc, puis ce bloc sera effacé et le cycle se répétera.

Illustration :

Quels sont les algorithmes de garbage collection JVM ?

Quels sont les algorithmes de garbage collection JVM ?

Avantages

  • Par rapport à l'algorithme mark-clean, il résout le problème de la fragmentation de la mémoire.
  • Plus efficace (lors du nettoyage de la mémoire, mémorisez la première et la dernière adresse et effacez-les immédiatement).

Inconvénients :

  • L'utilisation de la mémoire n'est pas élevée, seule la moitié de la mémoire peut être utilisée à la fois.

Amélioration

La recherche montre que la plupart des objets de la nouvelle génération sont « vivent et meurent », c'est-à-dire que le cycle de vie est très court et plus long l'objet vit, plus il est difficile de recycler. Lorsque le GC se produit, de nombreux objets doivent être recyclés et très peu survivent. Par conséquent, très peu d'objets doivent être déplacés vers une autre mémoire, il n'est donc pas nécessaire de diviser l'espace mémoire 1:1. Au lieu de cela, toute la nouvelle génération est divisée en trois zones dans un rapport de 8 : 1 : 1. La plus grande zone est appelée la zone Eden, et les deux plus petites zones sont appelées respectivement To Survivor et From Survivor.

Lors du premier GC, seuls les objets survivants d'Eden doivent être copiés vers To. Ensuite, toute la zone Eden est recyclée. Lorsque GC se reproduit, copiez l'Eden et le To survivants dans From et répétez ce processus. De cette façon, la mémoire disponible dans chaque nouvelle génération représente 90 % de la nouvelle génération totale, améliorant considérablement l'utilisation de la mémoire. [Recommandations associées : Tutoriel vidéo Java]

Cependant, il n'y a aucune garantie que les objets survivants représenteront toujours moins de 10 % de l'ensemble de la nouvelle génération. À l'heure actuelle, les objets copiés. ne peut pas être sauvegardé, donc ici un autre bloc de mémoire, appelé ancienne génération, sera utilisé pour effectuer les garanties d'allocation et stocker les objets de l'ancienne génération. Si cela ne suffit pas, MOO sera lancé.

Ancienne génération : stocke les objets de la nouvelle génération qui ont survécu à plusieurs tentatives de recyclage (par défaut 15 fois).

3. Marquage – algorithme de finition

Parce que l'algorithme de copie précédent continue de copier lorsque le taux de survie de l'objet est relativement élevé Venir et copier le passé n’a aucun sens et est une perte de temps. Ainsi, un algorithme de « tri par marquage » a été proposé pour les personnes âgées.

Étapes d'exécution :

  • Marquage : marquer ceux qui doivent être recyclés
  • Organisation : laisser partir les objets survivants vers la mémoire Déplacez une extrémité du fichier, puis nettoyez directement la mémoire inutilisée.

Illustration :

Quels sont les algorithmes de garbage collection JVM ?Quels sont les algorithmes de garbage collection JVM ?

4. Algorithme de collecte générationnelle

La plupart des machines virtuelles commerciales utilisent actuellement cet algorithme de collecte générationnelle. Cet algorithme n'a pas de nouveau contenu. Il divise simplement la mémoire entre la nouvelle génération et l'ancienne génération en fonction du temps de survie de l'objet. peut être adopté pour différents domaines. Par exemple :

  • Dans la nouvelle génération, un grand nombre d'objets meurent à chaque fois. L'ancienne génération est utilisée comme garantie de mémoire et adopte un algorithme de copie.
  • Dans l'ancienne génération, les objets ont une longue durée de vie et des algorithmes de tri ou de nettoyage des marques peuvent être utilisés.

La différence entre MinorGC et FullGC

MinorGC : collecte des déchets qui se produit dans la nouvelle génération en raison des caractéristiques du. nouvelle génération, MinorGC est très fréquent, la vitesse de recyclage est relativement rapide et la quantité recyclée à chaque fois est également importante.
FullGC : le garbage collection qui se produit dans l'ancienne génération, également appelé MajorGC, est relativement lent, environ 10 fois plus lent que MinorGc. Un FullGC est généralement accompagné de plusieurs MinorGC.

Pour plus de connaissances sur la programmation, veuillez visiter : Vidéo de programmation ! !

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:
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