Qu'est-ce qu'une référence faible?
Une référence faible est une référence à un objet en mémoire qui n'empêche pas un objet d'être nettoyé par des routines de nettoyage de place en raison de son association avec l'objet. Ce type de référence est couramment utilisé pour aider à éliminer les fuites de mémoire lorsqu'il existe des conditions spéciales empêchant la récupération de place. Les algorithmes de programmation qui utilisent une référence circulaire ou qui contiennent des informations superflues dans un cache ou une structure spéciale tirent parti de l'utilisation de références faibles. L'utilisation de références faibles dans ces types de situations permet de nettoyer les objets de référence non utilisés et leurs références faibles associées.
En programmation informatique, une référence forte est généralement créée par défaut lors de la création d'un objet et la mémoire occupée par l'objet reste allouée tant que la référence forte reste viable. Une référence forte est annulée et la mémoire de son objet associé est libérée peu après une référence forte et son objet sont signalés comme n'étant plus utilisés par un programme. Dans certaines situations, telles que la programmation de sockets ou les applications de manipulation d'images, les classes utilisées pour créer des objets de travail n'ont pas la capacité intégrée pour stocker des informations supplémentaires requises par une application spécifique. Les détails supplémentaires pour les objets transitoires tels que les connexions ou les images doivent être stockés dans des objets cache supplémentaires et liés aux objets transitoires par des références. Lorsqu'une référence faible est utilisée au lieu d'une référence forte, les informations supplémentaires ne sont pas liées par la référence et peuvent être supprimées du cache par le garbage collector une fois que l'objet de référence a été marqué comme non viable.
Les classes de référence faibles sont normalement disponibles dans les langages complétés par des sous-systèmes de récupération de place, notamment Java, Python, Perl, C # et le framework .NET. En C ++, cependant, les programmeurs sont généralement responsables du nettoyage de la mémoire. Ce langage a implémenté une classe de pointeur intelligent qui fournit certaines des mêmes fonctionnalités que les références faibles et la récupération de place, contribuant ainsi à réduire les fuites de mémoire causées par un nettoyage incorrect du pointeur.
Pour faciliter encore plus la gestion de la mémoire, les langages dotés de fonctions de récupération de place peuvent également améliorer la fonctionnalité d'un langage en fournissant des gradients plus fins de références autres que la référence forte ou faible. Des types de données tels que les références logicielles et les références fantômes peuvent être inclus dans ces langages, ce qui permet différents niveaux de notification de récupération d'objet ou de désaffectation. Les programmeurs qui utilisent des langages avec la récupération de place automatisée doivent se familiariser avec toutes les classes de référence disponibles afin d'améliorer les performances de l'application.