Maison >Java >javaDidacticiel >Tutoriel sur l'algorithme de récupération de place des fonctionnalités avancées de la JVM
1. Algorithme de marquage
L'algorithme de marquage est l'algorithme de collecte le plus basique. Le processus d'exécution est le même que son nom. est divisé en deux étapes : marquer et effacer
Marquez d'abord les objets qui doivent être recyclés. Une fois le marquage terminé, les objets marqués seront recyclés uniformément, comme le montre la figure ci-dessous .
Pour une introduction au processus de marquage spécifique, veuillez vous référer à « l'analyse d'accessibilité » dans l'article précédent sur la détermination de l'algorithme de survie des objets pour le garbage collectionRecyclage Etat précédent >
Inconvénients :
1. L'efficacité du marquage et du déblaiement n'est pas très élevée 2. Comme vous pouvez le voir sur le image, la mémoire après l'effacement Il y aura un grand nombre de fragments dans l'objet. L'inconvénient est que lors de l'allocation d'espace mémoire à des objets volumineux, cela peut avoir pour conséquence de ne pas pouvoir trouver un espace continu suffisamment grand. espace, provoquant un GC à l’avance.
2. Algorithme de copie
Le principe de l'algorithme de copie est de diviser l'espace mémoire en deux parties de la même taille. Lorsque le garbage collection est requis, copiez les objets survivants
dans la mémoire utilisée vers un autre morceau de mémoire, puis effacez le morceau de mémoire précédent. Comme le montre l'image ci-dessous
État avant recyclage
État du poste de recyclage
Avantages : L'algorithme de réplication est plus efficace
Inconvénients : Ceci L'espace sacrifié par le L'algorithme est plus grand. Après tout, l'espace mémoire utilisable est devenu la moitié de l'original3. Algorithme de tri des marques
Il s'agit d'un algorithme couramment utilisé dans l'ancienne génération, car les objets de l'ancienne génération sont stockés longtemps.
Le processus de marquage de l'algorithme de marquage et de tri est le même que celui de l'algorithme de nettoyage des marques, mais les étapes suivantes sont différentes. L'algorithme de marquage et de tri déplace les objets survivants. à une extrémité,Ensuite, nettoyez toute la mémoire de l'autre côté de la limite des survivants, comme indiqué ci-dessous
État précédent
🎜>4. Algorithme de collecte générationnelle
Les machines virtuelles actuelles utilisent toutes l'algorithme de collecte générationnelle . Cet algorithme divise la mémoire selon les différents cycles de survie des objets
Généralement, le tas Java est divisé en la nouvelle génération et l'ancienne génération5. Utilisation de l'algorithme de la nouvelle génération
Dans les machines virtuelles commerciales, l'algorithme de réplication est utilisé pour récupérer la nouvelle génération. La raison en est que 98 %. des objets de la nouvelle génération ont une durée de survie très courte.
Par conséquent, il n'est pas nécessaire de diviser la mémoire en deux blocs de même taille, ne laissant qu'un espace plus petit pour copier les objets survivants. Par conséquent, la mémoire
est généralement divisée en une zone Eden plus grande et deux zones survivantes plus petites. Lors du recyclage, les objets survivants de la zone Eden et de la zone survivant sont copiés dans une autre zone Dans la mémoire. zone des survivants, nettoyez Eden et le serviteur utilisé.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!