Je n'ai pas lu un livre sur Java depuis longtemps. Récemment, j'ai lu le langage de programmation de James Gosling << Java >> et j'ai pris des notes de lecture. Cette partie concerne le recyclage des ordures.
1. Recyclage des ordures
Les objets sont créés à l'aide de nouveaux, mais il n'y a pas de fonctionnement correspondant pour recycler la mémoire occupée par l'objet. Lorsque nous terminons l'utilisation d'un objet, nous devons simplement arrêter la référence à cet objet:
-> Changer la référence en point vers un autre objet
-> pointer la référence à null
-> retour de la méthode afin que les variables locales de la méthode n'existent plus
Points clés:
-> Lorsque nous ne pouvons pas atteindre un objet à partir d'un code exécutable, l'espace nécessaire peut être recyclé.
-> Le recyclage des ordures signifie que nous n'avons jamais à nous soucier des références qui pendaient. Une fausse référence fait référence à une référence à l'espace mémoire qui a été supprimé. Ce problème existe dans les systèmes où les programmeurs peuvent contrôler directement lorsque les objets sont supprimés.
-> Modèle de collecteur des ordures: méthode du compteur de référence (Impossible de résoudre la référence circulaire), Mark-and-Sweep.
2. Résumé
Finaliser la méthode
-> Une fois que le collecteur des ordures a déterminé que l'objet est inaccessible et que l'espace de l'objet sera recyclé, le collecteur des ordures appellera cette méthode.
-> Cette méthode peut effacer toutes les ressources non mémoire utilisées par l'objet et ne peut être appelée qu'une seule fois pour chaque objet. Même si l'exécution de cette méthode rend l'objet accessible à nouveau et redevient immédiatement inaccessible, la méthode ne peut être appelée qu'une seule fois.
La méthode -> finaliser peut être appelée dans une période de temps spécifique, et elle peut ne jamais être appelée (la machine virtuelle Java se termine).
Override Finaliser la méthode
-> Lorsqu'un objet devient des ordures, les autres objets auxquels il se réfère sont également susceptibles de devenir des ordures. Ces ordures ont peut-être été résiliées avant d'appeler la méthode Finalise que nous avons écrite, de sorte qu'elles peuvent être dans un état imprévisible.
-> Écraser La méthode Finalise consiste à ajouter la méthode super.finalize. Il est préférable de l'ajouter dans la phrase enfin. Assurez-vous qu'une partie du contenu déclaré dans sa superclasse peut également être résiliée.
Iii. Classes et méthodes connexes pour interagir avec les collectionneurs à ordures
Classe: runtime.getRuntime (), système
Méthodes: GC (), Runfinalisation (), FreeMemory (), TotalMemory (), MaxMemory ()
La classe système prend en charge les méthodes statiques GC () et Runfinalisation (), qui appellent les méthodes correspondantes sur l'objet d'exécution actuel.
Iv. État d'accessibilité et objets de référence
Un objet ne peut être collecté que lorsqu'aucune référence ne le spécifie, mais parfois nous pouvons vouloir collecter l'objet comme des ordures lorsqu'il y a toujours une référence sélectionnée pointant vers l'objet.
Le seul but d'un objet de référence est de maintenir une référence à un autre objet appelé référence. Habituellement, nous maintenons des références aux objets via des champs ou des variables locales, mais nous pouvons maintenant maintenir des références directes aux objets de référence, qui enveloppe l'objet dont nous avons réellement besoin. Le collecteur des ordures peut déterminer si la référence résiduelle à un objet est référencée à l'objet via la face de l'objet de référence, afin qu'elle puisse décider de recycler l'objet. La force de l'objet de référence déterminera le comportement du collecteur des ordures, et les références ordinaires sont les références les plus puissantes.
Classe de référence
-> Package: java.lang.ref
-> Méthodes typiques: get (), clear (), enqueue (), isenqueued ()
Citation et force d'accessibilité
-> Les objets sont fortement accessibles: référence ordinaire
-> L'objet est doucement accessible: Softreference
-> Les objets sont faiblement accessibles: faible référence
-> Les objets sont pratiquement accessibles (Phantom accessible): Phantomreference
-> Les objets sont inaccessibles: aucun lien de référence une fois que l'objet devient faiblement accessible (ou colonne faible), il peut être terminé. Si l'objet est inaccessible après la résiliation, il peut être recyclé.
La phase d'achat à l'objet déclenche le collecteur des ordures pour effectuer un comportement approprié sur les types d'objets de référence pertinents:
-> Des objets soft-accessibles peuvent être recyclés par le collecteur des ordures. Ce dont nous pouvons être sûrs, c'est que toutes les références de Softreferences pour les objets Softreference seront effacées avant de lancer une erreur d'OutofMemoryError.
-> Les objets bien accessibles seront recyclés par le collecteur des ordures.
-> L'objet virtuel accessible n'est pas vraiment accessible, car son objet référentiel ne peut pas être accessible par Phantomreference, et sa méthode GET renvoie toujours NULL. Mais l'existence de références virtuelles peut empêcher les objets d'être recyclés avant de nettoyer explicitement les références virtuelles. Les références virtuelles nous permettent de gérer des objets dont les méthodes finalisent ont été appelées, ce qui rend sécurisé qu'ils sont "morts".