1. Algorithme d'analyse de l'accessibilité (recherche racine)
JVM détermine si l'objet survit grâce à l'analyse d'accessibilité. L'idée de base de cet algorithme est d'utiliser une série d'objets appelés GC Roots comme point de départ, et de rechercher vers le bas à partir de ces nœuds. Les chemins recherchés sont appelés chaînes de référence. Lorsqu'un objet est connecté aux GC Roots sans aucune chaîne de référence, il est prouvé que cet objet n'est pas disponible. Dans la figure ci-dessous, les objets object1 , object2 , object3 et object4 sont des objets disponibles. Bien que object5 , object6 et object7 soient liés les uns aux autres, ils sont inaccessibles aux GC Roots , ils seront donc jugés comme des objets recyclables.
En langue java, les objets suivants qui peuvent être utilisés comme racines GC incluent:
1. Objet référencé dans la pile de machine virtuelle (variables locales dans le cadre de pile).
2. Objet référencé par les attributs statiques de classe dans la zone de la méthode.
3. Objet référencé par les constantes dans la zone de la méthode.
4. Objet référencé par JNI (méthode native) dans la pile de méthode locale.
2. Code source de printemps
spring crée des objets via la classe qui implémente l'interface BeanFactory , avec la structure d'implémentation suivante:
SimpleJndiBeanfactory.java
La classe publique SimpleJndiBiBeanFactory étend JNDilOcatorsupport implémente Beanfactory {private final Set <string> shareAbleResources = new HashSet (); // La carte créée à l'aide de New est un objet référencé dans la pile et peut être utilisé comme un objet GC Roots Private Final Map <String, Object> singletonObjects = new HashMap (); Map final privé <chaîne, classe <? >> ResourceTypes = new HashMap (); public SimpleJndiBianFactory () {this.setResourceref (true); } public void addShareraableResource (String ShareraableResource) {this.sharerablerSources.add (sharerableResource); } public void SetShareraableResources (String ... ShareraableResources) {this.sharerablerSources.addall (arrays.aslist (shareableResources)); } Objet public getBean (String Name) lève BeanSexception {return this.getBean (name, object.class); }}Statistablebeanfactory.java
classe publique statistableBeAnfactory implémente ListableBeAnfactory {Private Final Map <String, Object> Beans; public statistableBeAnfactory () {// La carte créée à l'aide de New est un objet référencé dans la pile, qui peut être utilisé comme objet GC Roots this.beans = new LinkedHashMap (); } public statistableBeanFactory (map <string, objet> beans) {assert.notnull (Beans, "la carte des haricots ne doit pas être nul"); this.beans = haricots; } public void addBean (nom de chaîne, haricot d'objet) {this.beans.put (name, bean); }} À partir du code source ci-dessus, nous pouvons voir que l'objet est stocké sur une carte, où mapsingletonObjects sont utilisées pour stocker des objets singleton. map singletonObjects et beans (nouveaux dans le constructeur) sont tous deux créés directement en utilisant le mot-clé new , qui est une référence forte et remplit les conditions en tant qu'objets GC Roots (objets référencés dans la pile de machines virtuelles (variables locales dans la trame de pile). Les objets créés de cette manière sont connectés à GC Roots对dans map , de sorte qu'ils ne seront pas recyclés.
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article sera d'une aide à votre étude ou à votre travail. Si vous avez des questions, vous pouvez laisser un message pour communiquer.