Maison >Java >javaDidacticiel >Fonctionnalités avancées JVM-3.

Fonctionnalités avancées JVM-3.

巴扎黑
巴扎黑original
2017-06-26 11:34:111527parcourir

1. Présentation

Dans la zone des données d'exécution, le compteur de programme, la pile de machines virtuelles et la pile de méthodes locales sont tous créés et détruits avec le thread. .

Par conséquent, leur allocation de mémoire et leur recyclage sont déterministes, et ils sont recyclés à la fin de la méthode ou du thread. Le tas Java et la zone de méthode sont incertains. La taille des objets créés lors de l'exécution du programme est incertaine. La taille de la mémoire requise ne peut être connue que lorsque le programme est en cours d'exécution. 🎜>

2. "Algorithme de survie"

Pour déterminer si un objet est vivant, il existe deux algorithmes principaux : la méthode de comptage de références et l'algorithme d'analyse d'accessibilité

Méthode de comptage de références

    La méthode de comptage de références consiste à ajouter une référence à l'objet Counter, chaque fois que l'objet est référencé
  • , la valeur du compteur est incrémentée de 1, et l'expiration de la référence est décrémentée de 1. Si le compteur est à 0, cela signifie qu'il ne sera plus utilisé.

Algorithme d'analyse d'accessibilité

    L'algorithme d'analyse d'accessibilité est une implémentation courante,Cet algorithme utilise le nœud qui devient le GC ROOT comme nœud racine,
  • À partir de ce nœud racine, recherchez vers le bas. S'il n'y a pas de chaîne de référence reliant l'objet au GC ROOT (c'est-à-dire qu'il est inaccessible), il est utilisé. signifie que le L'objet n'est pas disponible

  • Les objets pouvant être utilisés comme GC ROOT sont :

    Pile de machine virtuelle L'objet de référence dans la table des variables locales

  • La référence de propriété statique de classe dans la méthode est exclusive
    • L'objet exposé dans la méthode

    • Objet de référence dans la méthode locale

    • À l'heure actuelle, l'algorithme d'analyse d'accessibilité est devenu l'algorithme principal. La raison en est que l'algorithme du compteur de références ne peut pas résoudre le problème des
      objets se référençant les uns aux autres

      .
    Processus d'analyse et de jugement d'accessibilité

    •  

      Après avoir effectué une analyse d'accessibilité sur l'objet, on constate qu'aucune chaîne de référence n'y est connectée, il est donc marqué pour la première fois et effectuez un filtre, La condition de filtrage est de savoir si la méthode finalize() doit être exécutée. Lorsque l'objet ne couvre pas la méthode finalize ou que la méthode finalize a été appelée,

    • On considère qu'il n'est pas nécessaire de l'exécuter. Si s'il est jugé nécessaire de l'exécuter, il le sera. placé dans une file d'attente appelée F-Queue. Plus tard, JVM

    créera automatiquement un thread de finalisation de faible priorité pour exécuter la méthode finalize de ces objets, puis GC L'objet dans F-. QUEUE sera marqué une deuxième fois. Si l'objet ne peut pas s'échapper à ce moment, il sera recyclé.

    Méthode finalize()

    • La méthode finalize a été mentionnée à plusieurs reprises ci-dessus, veuillez faire attention, la méthode de finalisation de l'objet ne sera automatiquement appelée qu'une seule fois par le système. Il n'est pas recommandé d'utiliser cette méthode. Sa fonction peut être complétée par try-finally à la place

      

    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!

    Déclaration:
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn