Java-Thread: Garbage Collected or Not?
In diesem Java-Code-Snippet wird ein neuer Thread erstellt und mit t.start( ). Nach dem Starten des Threads wird jedoch die Thread-Referenz t auf null gesetzt, wobei t = null ist. Dies wirft die Frage auf, ob der Thread ohne einen aktiven Verweis darauf durch Garbage Collection erfasst wird oder nicht.
Garbage Collection in Java
Wenn der Garbage Collector in Java ausgeführt wird Es identifiziert und entfernt Objekte, die nicht mehr aus den aktiven Teilen des Programms erreichbar sind. In diesem Fall wird der Thread als anonyme Klasse erstellt, die weiter ausgeführt wird. Auch wenn die t-Referenz im Hauptthread auf Null gesetzt ist, bleibt der Thread selbst aktiv und wird nicht sofort durch Garbage Collection erfasst.
Warum der Thread aktiv bleibt
A Der laufende Thread wird als Garbage-Collection-Root betrachtet, was bedeutet, dass er als für den Garbage Collector erreichbar gilt. Solange der Thread noch läuft, wird verhindert, dass die Objekte, auf die er verweist, durch Garbage Collection erfasst werden.
In diesem Fall referenziert der Thread seine eigenen internen Datenstrukturen, wie z. B. den Stack-Trace, den Thread-Status usw gemeinsames Gedächtnis. Indem der Thread ein Garbage-Collection-Root ist, stellt er sicher, dass auf diese internen Objekte zugegriffen werden kann.
Haupt-Thread als Garbage-Collection-Root
In ähnlicher Weise dient der Haupt-Thread auch als Garbage-Collection-Root. Auch wenn möglicherweise keine expliziten Verweise auf den Hauptthread vorhanden sind, ist er dennoch aktiv und wird ausgeführt. Dadurch wird verhindert, dass sich selbst und alle Objekte, auf die es verweist, im Müll gesammelt werden.
Fazit
Daher wird der Thread in diesem Codeausschnitt auf unbestimmte Zeit weiterlaufen, weil Es wird als Garbage-Collection-Root betrachtet. Die Tatsache, dass es keine explizite Referenz vom Hauptthread hat, spielt keine Rolle, da es aktiv bleibt und die Objekte, auf die es verweist, erreichbar hält. Der Garbage Collector sammelt den Thread nur, wenn er beendet wird, und gilt nicht mehr als Garbage Collection Root.
Das obige ist der detaillierte Inhalt vonWird ein Thread-Garbage gesammelt, wenn seine Referenz in Java auf Null gesetzt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!