1. Algorithmus zur Zugänglichkeitsanalyse (Root Search)
JVM bestimmt, ob das Objekt durch Zugänglichkeitsanalyse überlebt. Die Grundidee dieses Algorithmus besteht darin, eine Reihe von Objekten zu verwenden, die als GC Roots als Ausgangspunkt bezeichnet und nach diesen Knoten nach unten suchen. Die durchsuchten Pfade werden als Referenzketten bezeichnet. Wenn ein Objekt ohne Referenzketten mit GC Roots verbunden ist, wird bewiesen, dass dieses Objekt nicht verfügbar ist. In der folgenden Abbildung sind Objekte object1 , object2 , object3 und object4 verfügbare Objekte. Obwohl object5 , object6 und object7 miteinander verbunden sind, sind sie für GC Roots nicht erreichbar, sodass sie als recycelbare Objekte beurteilt werden.
In der Java -Sprache sind die folgenden Objekte, die als GC -Wurzeln verwendet werden können, umfassen:
1. Objekt, auf das im virtuellen Maschinenstapel verwiesen wird (lokale Variablen im Stapelrahmen).
2. Objekt, das durch statische Attribute der Klasse im Methodenbereich verwiesen wird.
3.. Objekt, auf das Konstanten im Methodenbereich verwiesen wird.
4. Objekt, auf das JNI (native Methode) im lokalen Methodenstapel verwiesen wird.
2. Frühlingsquellcode
spring erstellt Objekte durch die Klasse, die BeanFactory der Schnittstelle mit der folgenden Implementierungsstruktur implementiert:
SimpleJndibeanFactory.java
public class simplejndibeanfactory erweitert jndilocatorsupport implementiert beanfactory {private endgültige Set <string> ShareeboBanSources = new Hashset (); // Die mit New erstellte Karte ist ein im Stapel verwiesener Objekt und kann als GC -Roots -Objekt Private Final Map <String, Object> SingletonObjects = New HashMap () verwendet werden. private endgültige Karte <String, Klasse <? >> Resourcetypes = new HashMap (); public simplejndibeanfactory () {this.setResourCeref (true); } public void addShareeboseresource (String ShareeboserSource) {this.shareeboseresources.add (ShareeboserSource); } public void setShareeboseresources (String ... ShareeboBersoSources) {this.shareebobleresources.addall (arrays.aslist (ShareeboBleSources)); } public Object getBean (String -Name) löscht Beansexception {return this.getBean (Name, Object.Class); }}StaticListableBeanFactory.java
öffentliche Klasse staticLilableBeanFactory implementiert listableBeanFactory {private endgültige Karte <String, Objekt> Beans; public staticListableBeanFactory () {// Die mit New erstellte Karte ist ein im Stapel verwiesener Objekt, auf das als GC -Roots -Objekt verwendet werden kann. } public staticListableBeanFactory (MAP <String, Object> Beans) {assert.notnull (Beans, "Beans -Karte darf nicht null sein"); this.boane = beans; } public void addBean (String -Name, Objektbean) {this.beans.put (Name, Bean); }} Aus dem obigen Quellcode können wir sehen, dass das Objekt in einer Karte gespeichert ist, in der mapsingletonObjects zum Speichern von Singleton -Objekten verwendet werden. map singletonObjects und beans (neu im Konstruktor) werden beide direkt unter Verwendung des Schlüsselworts map new . Dies ist eine starke Referenz und erfüllt die Bedingungen als GC Roots (Objekte, die im virtuellen Maschinenstapel verwiesen werden (lokale GC Roots对im Stapelrahmen).
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, der Inhalt dieses Artikels wird Ihnen bei Ihrem Studium oder Ihrer Arbeit helfen. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen.