«Compréhension approfondie de la machine virtuelle» Notes de lecture - Récupération du jugement de mémoire

Récupérer le jugement de la mémoire

  • Comptage des références (sans objet)
    • Il existe un compteur de référence pour l'objet. Lorsqu'un lieu s'y réfère, le compteur est +1; si la référence n'est pas valide, elle est -1. Lorsque le compteur est 0, il n'y a pas de relation de référence.
    • Mise en œuvre simple et efficacité de jugement élevée
    • Il y a la question des références circulaires. Il existe une référence mutuelle entre deux objets, mais il n'est pas accessible en externe et doit être recyclé, mais il existe une référence circulaire, ce qui rend le recyclage impossible.
  • Algorithme d'analyse d'accessibilité (gc-roots)
    • Gc Roots
      • Objets référencés par la pile de machines virtuelles (table de variables locales dans le cadre de pile)
      • L'objet de référence de variable statique dans la zone de méthode
      • Objet de référence constant dans la zone de méthode
      • Pile de méthode locale JNI - objet de référence natif
    • A travers l'objet de "GC Roots" comme point de départ, le chemin de l'objet est recherché vers le bas, ce qui est appelé la chaîne de référence.
    • Lorsqu'il n'y a pas de chaîne de référence entre l'objet et GC Roots, l'objet est inaccessible.
  • Type de référence
    • Référence forte
      • La référence associée à l'objet créé par le mot-clé new est une référence forte.
      • Lorsque la JVM dispose d'un espace mémoire insuffisant, la JVM préfère lancer une erreur d'exécution OutOfMemoryError (OOM) et ne résoudra pas le problème de mémoire insuffisante en recyclant les objets "vivants" avec des références fortes.
    • Référence souple
      • Ce n'est que lorsque la JVM pense que la mémoire est insuffisante qu'elle essaiera de récupérer l'objet pointé par la référence logicielle: c'est-à-dire que la JVM s'assurera que l'objet pointé par la référence logicielle est nettoyé avant que OutOfMemoryError ne soit levée.
      • La référence logicielle peut être utilisée conjointement avec une file d'attente de référence (ReferenceQueue). Si l'objet référencé par la référence logicielle est collecté par le garbage collector, la machine virtuelle ajoute la référence logicielle à la file d'attente de référence qui lui est associée.
      • Scénario d'application: des références logicielles sont généralement utilisées pour implémenter la mise en cache sensible à la mémoire.
    • Référence faible (WeakReference)
      • Dans le processus du thread de ramasse-miettes analysant la zone de mémoire sous sa juridiction, une fois qu'un objet avec des références faibles est trouvé, que l'espace mémoire soit suffisant ou non, il récupérera sa mémoire.
      • Les références faibles peuvent être utilisées conjointement avec une file d'attente de référence (ReferenceQueue). Si l'objet référencé par la référence faible est récupéré, la machine virtuelle ajoutera la référence faible à la file d'attente de référence qui lui est associée.
      • Scénario d'application: des applications faibles peuvent également être utilisées pour les caches sensibles à la mémoire.
    • Référence fantôme (PhantomReference)
      • Si l'objet ne contient que des références virtuelles, comme pour aucune référence, toutes les propriétés ou fonctions de l'objet qui ne sont pas accessibles via des références virtuelles peuvent être collectées par le garbage collector.
      • Les références fantômes fournissent simplement un mécanisme pour s'assurer qu'après qu'un objet est finalisé, il fasse quelque chose.
      • La référence virtuelle doit être utilisée conjointement avec la file d'attente de référence (ReferenceQueue). Lorsque le garbage collector se prépare à récupérer un objet, s'il constate qu'il possède toujours une référence virtuelle, il ajoute la référence virtuelle à la file d'attente de référence qui lui est associée avant de récupérer la mémoire de l'objet.
      • Vous pouvez savoir si l'objet référencé sera récupéré en jugeant si une référence virtuelle a été ajoutée à la file d'attente de référence. Si vous constatez que la référence virtuelle a été ajoutée à la file d'attente de référence, vous pouvez effectuer une action avant que l'objet référencé ne soit recyclé.
    • Pour les références souples et les références faibles, le garbage collection peut avoir un deuxième problème de confirmation pour garantir qu'il n'a pas été changé en une référence forte.
  • Juger la mort du sujet
    • 1. Après l'analyse d'accessibilité de l'objet, s'il n'y a pas de chaîne de référence avec GC Roots, il est marqué pour la première fois et filtré.
    • 2. Condition de filtrage: est-il nécessaire d'effectuer finalize () sur cet objet? Lorsque l'objet ne couvre pas finalize () ou a été exécuté, il est considéré comme "pas besoin d'exécuter".
    • 3. S'il est nécessaire de l'exécuter, l'objet est placé dans la file d'attente F-Queue et exécuté par le thread Finalizer de faible priorité créé par la machine virtuelle.
      • Il n'y a aucune garantie que finalize () sera exécuté ou terminé, pour empêcher la finalisation de s'exécuter lentement ou dans une boucle sans fin, entraînant un crash dans la récupération de mémoire.
      • finalize () est exécuté au plus une fois pendant tout le cycle de vie. Si l'objet est à nouveau recyclé après avoir été sauvé par cette méthode, il est considéré que cette méthode a été appelée.
    • 4. Le GC marque les objets dans la F-Queue une deuxième fois à petite échelle. Si un objet établit une chaîne de référence avec GC Roots, il sera supprimé de la collection "coming soon".
  • Zone de méthode de recyclage
    • Constante obsolète
      • Il peut être recyclé sans références associées.
    • Classe inutile
      • Toutes les instances de cette classe ont été recyclées
      • Le ClassLoader qui a chargé la classe a été recyclé
      • L'objet Class correspondant à cette classe n'est pas référencé et les méthodes de cette classe ne sont pas accessibles par réflexion.
    • Satisfaire aux conditions de recyclage des classes inutiles signifie seulement qu'elles peuvent être recyclées.
Publié 24 articles originaux · loué 0 · visites 102

Je suppose que tu aimes

Origine blog.csdn.net/jiangxiayouyu/article/details/105614222
conseillé
Classement