Java-Thread: Garbage Collected or Not?
In diesem Java-Code-Snippet wird ein neuer Thread erstellt und mit t.start( gestartet ). 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.
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.
Schlussfolgerung
Daher wird der Thread in diesem Codeausschnitt auf unbestimmte Zeit weiter ausgeführt, 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.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3