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.
L'environnement d'exploitation de ce tutoriel : système windows7, version java8, ordinateur DELL G3.
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 :
Illustration :
Inconvénients :
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 :
Avantages
Inconvénients :
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 :
Illustration :
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 :
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!