4 Stimmen

Werden lokale Variablen gesammelt, nachdem die Methode ausgeführt wurde?

Zum Beispiel

public void doSomething() {
   Dog smallDog = new Dog();
   smallDog.bark();
}

wird das Hundeobjekt nach Ausführung dieser Methode eingesammelt?

6voto

Affe Punkte 46224

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!

2voto

Hakan Serce Punkte 11078

Einfach nein. Ich meine, das Timing muss nicht so sein.

Alle Java-Objekte werden auf dem Heap alloziert und vom GarbageCollector eingesammelt. Der GarbageCollector läuft im Hintergrund, so dass es fast keine Einschränkungen hinsichtlich des Zeitpunkts der tatsächlichen Garbage Collection gibt.

1voto

Tim Bender Punkte 19653

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.

0voto

kosa Punkte 65422

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

0voto

fresskoma Punkte 24869

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.com

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.

Powered by:

X