Il existe deux principaux types d’algorithmes de Garbage Collection en Java : la récupération complète de la mémoire et la récupération incrémentielle de la mémoire.
Récupération de la mémoire complète
La récupération de mémoire complète est un processus systématique qui parcourt l'intégralité de la mémoire utilisée par un programme afin d'identifier et de supprimer les objets qui ne sont plus référencés. Ces objets sont marqués comme inutiles et peuvent être éliminés de la mémoire.
La récupération de mémoire complète est une fonctionnalité typique des systèmes d'exécution de langages de programmation avec gestion automatique de la mémoire, comme Java ou Python. Pendant le processus, le récupérateur interrompt l'exécution du programme pour rechercher les objets indésirables, ce qui peut entraîner un ralentissement temporaire des performances du programme.
La récupération de mémoire complète est activée lorsque la mémoire utilisée par un programme atteint un certain seuil ou lorsque le programme demande un nouveau bloc de mémoire et que la mémoire disponible est insuffisante. La récupération de mémoire complète permet de récupérer la mémoire inutilisée par le programme, ce qui la rend disponible pour d'autres parties du programme ou d'autres programmes en cours d'exécution sur la même machine..
Récupération incrémentielle de la mémoire
La récupération incrémentielle de la mémoire est une technique de gestion de la mémoire utilisée par les langages de programmation et les environnements d'exécution pour récupérer automatiquement la mémoire dont un programme n'a plus besoin. Cela fonctionne en identifiant les objets en mémoire qui ne sont plus utilisés et en libérant la mémoire qu'ils occupent pour la réutilisation par d'autres parties du programme.
Dans le cadre de la récupération incrémentielle, le récupérateur scanne périodiquement la mémoire du programme pour identifier les objets inaccessibles dans la mémoire heap de la jeune génération. Au lieu d'interrompre l'exécution du programme pendant ce processus de balayage, le récupérateur divise le balayage en petits morceaux gérables appelés « incréments ». À chaque incrément, le récupérateur scanne une partie de la mémoire du programme, identifiant les objets inutiles et les marquant comme disponibles pour la réutilisation.
En utilisant des incréments, le récupérateur peut récupérer de la mémoire par petites portions, sans interrompre l'exécution du programme pendant une longue période. Cela contribue à garantir que le programme reste réactif et ne subit pas de pauses ou de retards importants en raison du processus de récupération.
Cependant, la récupération incrémentielle peut être moins efficace que d'autres types de techniques de récupération de mémoire, comme le marquage-balayage ou la récupération générationnelle, car elle nécessite des scans plus fréquents de la mémoire du programme. De plus, l'utilisation d'incréments peut introduire une certaine surcharge dans l'exécution du programme, car le récupérateur de mémoire doit maintenir des informations d'état entre chaque incrément.