Il existe quatre algorithmes de collecte de déchets communs dans JVM:
Algorithme de protection de marque (mark-sweep);
Copie d'algorithme (copie);
Compact mark;
Collection générationnelle;
Préordons-le un par un:
1. Algorithme de compensation de marque (Mark-Sweep)
Il s'agit de l'algorithme de collecte des ordures le plus basique. L'algorithme est divisé en deux étapes: "marquage" et "compensation": Premièrement, tous les objets qui doivent être recyclés sont marqués, et tous les objets marqués sont uniformément recyclés une fois le marquage terminé. Ses principaux inconvénients sont deux: l'un est le problème d'efficacité, et l'efficacité du marquage et du nettoyage n'est pas élevée; L'autre est le problème de l'espace, une fois le marquage défriché, un grand nombre de fragments de mémoire discontinus seront générés. Trop de fragments d'espace peuvent provoquer un grand espace continu insuffisant lors de l'allocation de grands objets, et une autre action de collecte des ordures doit être déclenchée à l'avance.
Diagramme d'algorithme de marque
2. Copie d'algorithme (copie)
Afin de résoudre le problème d'efficacité, avec l'algorithme "Copie", il divise la mémoire disponible en deux blocs de la même taille. Utilisez une seule pièce à la fois. Lorsqu'une pièce d'espace est utilisée, copiez l'objet encore survivant à une autre pièce, puis nettoyez l'espace mémoire nouvellement utilisé en même temps. Cela permet de recycler l'une des pièces à chaque fois, afin que la fragmentation de la mémoire et d'autres situations complexes ne soient pas nécessaires pour être considérée lors de l'allocation de la mémoire. Implémentation simple et fonctionnement efficace. Mais le coût de cet algorithme est de réduire la mémoire à la moitié de l'original, ce qui est un peu trop cher. En fait, 98% des objets de la nouvelle génération vivent et meurent, il n'est donc pas nécessaire de diviser la mémoire dans un rapport 1: 1, mais de diviser la mémoire en un espace Eden plus grand et deux espaces de survivants plus petits, à chaque fois en utilisant l'espace Eden et l'un des espaces de survivants. Une fois recyclé, copiez les objets encore survivants à Eden et survivant à un autre Suivivor à un moment donné, et enfin nettoyer l'espace d'Eden et du survivant nouvellement utilisé.
Diagramme de copie de l'algorithme
3.
Lorsque le taux de survie des objets est élevé, l'algorithme de réplication et de collecte doit effectuer plus d'opérations de réplication et l'efficacité deviendra plus faible. Plus important encore, si vous ne voulez pas gaspiller 50% de l'espace, vous devez avoir un espace supplémentaire pour allouer des garanties pour faire face à la situation extrême où tous les objets de la mémoire de la demi-zone sont à 100% vivants, donc cet algorithme ne peut pas être directement utilisé chez les personnes âgées.
Par conséquent, les gens ont proposé un autre algorithme de "compact Mark. Étant donné que les objets des personnes âgées ont un long cycle de survie, certaines personnes ont proposé l'algorithme "compact". Le processus de marquage est le même que le «nettoyage de marque», mais tout en nettoyant les objets morts, les objets survivants seront triés, ce qui peut réduire l'espace fragmenté.
Diagramme d'algorithme d'organisation de la marque
4. Collection générationnelle
Actuellement, la collecte des ordures pour les machines virtuelles commerciales adopte l'algorithme "Generational Collection". Il n'y a pas de nouvelle idée dans cet algorithme, mais la mémoire est divisée en plusieurs pièces selon les différents cycles de survie de l'objet. Généralement, les tas de Java sont divisés en nouvelle génération et à l'ancienne génération, de sorte que l'algorithme de collecte le plus approprié peut être utilisé en fonction des caractéristiques de chaque génération. Dans la nouvelle génération, chaque fois qu'une collection de déchets est collectée, un grand nombre d'objets sont trouvés morts et seul un petit nombre survit. Utilisez ensuite l'algorithme de copie et la collection peut être complétée avec une petite quantité de coût de copie. Chez les personnes âgées, parce que le taux de survie des objets est élevé et que le cycle est long, l'algorithme "Mark-Tidy" ou "Mark-Clear" est utilisé pour le recycler.
L'introduction ci-dessus aux algorithmes de collecte des ordures communs dans JVM est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.