Zum Beispiel
public void doSomething() {
Dog smallDog = new Dog();
smallDog.bark();
}
wird das Hundeobjekt nach Ausführung dieser Methode eingesammelt?
Zum Beispiel
public void doSomething() {
Dog smallDog = new Dog();
smallDog.bark();
}
wird das Hundeobjekt nach Ausführung dieser Methode eingesammelt?
Es kann zu förderfähig die gesammelt werden, wenn die Methode zurückkehrt. Wann die Garbage Collection tatsächlich stattfindet, liegt zu einem unbekannten Zeitpunkt in der Zukunft.
Es ist unmöglich, dies mit Sicherheit zu sagen, ohne die Implementierung von bark() zu sehen.
Wenn das Ihre Rinde ist:
public void bark() {
BarkListeners.callBack(this);
}
public class BarkListeners {
private static final List<Dog> barkers = new ArrayList<Dog>();
public static void callBack(Dog dog) {
barkers.add(dog);
}
}
Und nein, es wird nicht in die Müllabfuhr kommen!
Technisch gesehen ist es nicht möglich, eine Antwort zu geben, da wir die Umsetzung für Dog#bark()
.
Im Allgemeinen lautet die Antwort JA, die Dog
Instanz gesammelt wird, NACHDEM die Methode ausgeführt wird, ist es einfach nicht möglich, genau zu wissen, wann. Der Grund dafür ist, dass, wenn die bark
Methode teilt den Verweis auf die Dog
Objekts mit einem anderen Objekt, die jeweilige Instanz von Dog
nicht mehr erreichbar sein wird. Das nächste Mal, wenn der Garbage Collector läuft, wird er feststellen, dass Dog
nicht erreichbar ist und den Heap-Speicherplatz, der zur Aufbewahrung verwendet wurde, zurückholen.
Dies hängt von der Reichweite des Objekts ab. Wenn das Objekt nicht erreichbar ist, dann ist es für GC qualifiziert. Wann GC durchgeführt wird, hängt von der JVM-Implementierung ab. Die Wahrheit über Garbage Collection
Dieser Blogbeitrag bietet eine gute Erklärung, wie der Garbage-Collection-Prozess funktioniert. Zusammengefasst:
Ein Objekt kommt für die Garbage Collection in Frage, wenn es weder von einem aktiven Thread noch von einem statischen Verweis aus erreichbar ist. Er (der Garbage Collector) wird nur dann ausgelöst, wenn die JVM der Meinung ist, dass eine Garbage Collection aufgrund der Größe des Java-Heaps erforderlich ist.
Daher sollten Sie keine Annahmen darüber treffen, wann ein Objekt in den Garbage Collect gelangt.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.